23

Làm cách nào để sử dụng hình nền trong chủ đề/kiểu Hoạt động?Hình nền hoạt động Android

Nếu tôi làm điều này bằng cách sử dụng màu sắc:

<style name="CustomTheme" parent="android:Theme.Light"> 
    <item name="android:windowBackground">@color/custom_theme_color</item> 
</style> 

Nó hoạt động một cách chính xác, nhưng nếu tôi thay thế phù hợp với:

<item name="android:windowBackground">@drawable/splash_image</item> 

Các hiển thị hình ảnh một cách chính xác, nhưng tất cả các nội dung được squished vào một khối nhỏ ở góc trên bên trái của màn hình. Bóng bên dưới thanh trạng thái cũng bị cắt hoặc bị rối.

Tôi đang sử dụng Mono cho Android và hình ảnh là một png chín bản vá hợp lệ.

+0

Dành cho mọi người đọc tại đây ... hãy lưu ý rằng bạn có thể vẽ được mà bạn sử dụng trong cửa sổBackground dưới dạng AppTheme tùy chỉnh sẽ được tải hoàn toàn được giải mã vào heap của bạn. Ngay cả một hình ảnh nhỏ về kích thước (như 90KiB) có thể dẫn đến việc phân bổ 90MiB và hơn thế nữa, vì giải mã được thực hiện trong thời gian chạy. Điều này sẽ gây ra vấn đề OutOfMemory nhanh hơn ánh sáng. :) – JacksOnF1re

+0

Để biết thêm thông tin, hãy đọc bài viết này cách thiết lập màn hình splash chính xác: https://www.bignerdranch.com/blog/splash-screens-the-right-way/ – JacksOnF1re

Trả lời

9

tôi không sử dụng các chủ đề hoặc bất cứ điều gì, vì vậy tôi không chắc chắn làm thế nào mà sẽ ảnh hưởng đến điều này, nhưng tôi đặt nền của tôi như thế này:

getWindow().setBackgroundDrawableResource(R.drawable.background_image); 

trong onCreate

+3

Tôi không khuyến khích phương pháp này, vì nó sạch hơn để xác định nó trong chủ đề. Nó cho phép Android hiển thị ngay lập tức khi hoạt động được khởi chạy, thay vì nhìn thấy chớp mắt khi mã được thực thi. –

16

Tôi cũng don' t sử dụng các chủ đề, vì vậy trong cách bố trí hoạt động, tôi sẽ thêm

android:background="@drawable/splash_image" 
+4

Cảm ơn các bạn, nhưng tôi cần phải sử dụng một chủ đề vì nội dung bố cục đến trễ. Trong mono cho android, có một vài giây chậm trễ trong khởi động. Tôi cần phải có hình ảnh được hiển thị trước khi thời gian chạy thực sự bắt đầu. Do bố cục chỉ được áp dụng sau khi thời gian chạy đã bắt đầu, tôi phải sử dụng chủ đề, vì nó được áp dụng ngay lập tức. – Matthew

+0

Không sao cả. Tôi đang xem xét các chủ đề ngay bây giờ bởi vì một câu hỏi tôi hỏi vì vậy nếu tôi tìm ra nó thông qua đó tôi sẽ lấy lại cho bạn. – VicVu

+0

Bất kỳ may mắn nào với điều này? – Matthew

4

Tôi cần có hình ảnh giật gân giống như hoạt động ban đầu của ứng dụng và gặp vấn đề tương tự. Tôi đã có may mắn với windowContentOverlay thay vì windowBackground. Có thể vẽ được xuất hiện bên dưới thanh trạng thái ở cùng vị trí chính xác như bố cục thực. Nó đã hoạt động trên Android 2.2, Android 3.0 và Android 4.1.

Đây là phong cách của tôi:

<style name="SplashTheme" parent="android:style/Theme.Light"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowContentOverlay">@drawable/splash</item>  
</style> 

My splash.xml bắt chước drawable tôi giao diện người dùng tiêu đề sử dụng lớp-list:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!--- Background; tile is broken on Android 2.2 so just have super wide background that will get clipped --> 
    <item> 
     <bitmap android:gravity="top|left" android:src="@drawable/splash_background" /> 
    </item> 

    <!--- Icon left justified --> 
    <item> 
     <bitmap android:gravity="top|left" android:src="@drawable/header_icon" /> 
    </item> 

    <!--- Buttons/etc right justified --> 
    <item> 
     <bitmap android:gravity="top|right" android:src="@drawable/splash_buttons" /> 
    </item> 
</layer-list> 

Tôi tin ActionBar cũng có một số được xây dựng trong cách để xử lý việc này, nếu ứng dụng của bạn sử dụng nó. Các MonoIO sample dường như có một hình ảnh khởi động.

+0

Có thể thêm một bản xem văn bản vào tệp splash.xml của bạn không? Tôi cần hiển thị màn hình giật gân với biểu tượng và văn bản chẳng hạn như Đang kết nối ... – v4r

+0

cách thay đổi kích thước hình nền, do đó, nó vừa với chiều rộng của màn hình và giữ tỷ lệ khung hình, với giải pháp này? – pfaehlfd

+0

Tôi chưa thực hiện phát triển Android trong nhiều năm. Đề xuất câu hỏi StackOverflow mới. – t9mike

6

Giải pháp của tôi đã thay đổi android: windowBackground thành android: background.

<?xml version="1.0" encoding="UTF-8" ?> 
<resources> 
    <style name="Theme.Splash" parent="android:Theme"> 
    <item name="android:background">@drawable/splash</item> 
    <item name="android:windowNoTitle">true</item> 
    </style> 
</resources> 
Các vấn đề liên quan