2011-01-29 72 views
14

Vì vậy, tôi đã đọc blog post của Romain Guy về cách thiết lập nền cửa sổ và hiệu suất được chia sẻ và đang cố gắng mô phỏng điều đó. Đó là một giải pháp đơn giản và không chắc chắn lý do tại sao tôi không thể làm việc này, nhưng hoạt động này đơn giản từ chối để chọn lên nền được chỉ dẫn.Android: Đặt nền cửa sổ khi khởi chạy Hoạt động

Tôi có một ListView mà onListItemClick khởi chạy Hoạt động mới, một hoạt động mất 3-5 giây để tải đầy đủ. Trong khi người dùng đang chờ, tôi muốn vẽ một windowBackground để họ thấy 'hoạt động trước khi nó thực sự sẵn sàng. Dưới đây là mã của tôi:

đoạn AndroidManifest cho Hoạt động triển khai:

<activity 
     android:name=".activity.EditorActivity" 
     android:screenOrientation="portrait" 
     android:windowBackground="@drawable/background_editor"> 

Cách bố trí XML cho EditorActivity:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
    android:id="@+id/editor" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:text="Editor" /> 
</FrameLayout> 

Và cuối cùng, đối tượng vẽ được thiết lập trong Manifest, background_editor.xml :

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/editor_bg" 
    android:tileMode="repeat" /> 

editor_bg là tệp .png nằm trong lề có thể vẽ được r.

Kết quả cuối cùng là EditorActivity được đưa ra, và tất cả tôi thấy là mặc định nền đen với dòng chữ "Editor" hiển thị trong trắng (Tôi nói thêm rằng để kiểm tra rằng các tập tin XML được tải một cách chính xác.

tôi cũng đã cố gắng thiết lập nền của FrameLayout và TextView thành minh bạch thông qua android: background = "@ android: color/transparent", nghĩ rằng có thể chúng đã được mặc định cho nền đen, nhưng không may mắn. vài ngày, tôi chắc chắn rằng tôi đang thiếu một cái gì đó đơn giản ... bất kỳ sai lầm rõ ràng tôi đang làm ở đây?

+1

Đã cập nhật liên kết tới bài đăng được tham chiếu: http: // và roid-developers.blogspot.com/2009/03/window-backgrounds-ui-speed.html –

Trả lời

37

Thử thiết lập nền cửa sổ trước khi khởi chạy hoạt động mới theo chương trình.

getWindow().setBackgroundDrawableResource(R.drawable.my_drawable); 
1

nó làm việc cho tôi nếu tôi tuyên bố này trong một Style Theme trong styles.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <style name="CustomTheme" parent="android:Theme.Holo.NoActionBar"> 
     <item name="android:windowBackground">@color/bg_evening</item> 
    </style> 

</resources> 

và trong manifest tôi đặt chủ đề này để ứng dụng của tôi:

<application 
    android:name="com.my_app.pack" 
    android:theme="@style/CustomTheme" > 
... 

hoặc một trong các hoạt động của tôi:

<activity 
    android:name="..." 
    android:theme="@style/CustomTheme"> 
... 

bạn có thể khai báo phong cách chủ đề muliple và thêm bất kỳ một trong số họ vào bất kỳ hoạt động của bạn, mà sẽ ghi đè lên chủ đề thiết lập để ứng dụng

2

Tôi đã chạy vào cùng một vấn đề và lãng phí ngày của tôi trên đó. Chúng tôi không thể thiết lập chủ đề trong java như trong trường hợp của tôi kiểm soát đến onCreate hoạt động giật gân của tôi rất muộn. Đến thời điểm đó màn hình đen vẫn hiển thị.

Điều này đã cho tôi manh mối rằng cửa sổ phải được quản lý từ chủ đề mà chúng tôi chỉ định trong tệp kê khai.

Có manifest tôi có:

<activity 
     android:name=".main.activities.SplashScreen" 
     android:theme="@style/Splash" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
</activity> 

Bây giờ Chủ đề tôi tạo ra là như sau:

<style name="Splash" parent="@style/Theme.AppCompat.Light"> 
    <item name="android:windowBackground">@drawable/splash</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="windowNoTitle">true</item> 
    <item name="colorPrimaryDark">@color/green_09</item> 
    <item name="colorPrimary">@color/green_09</item> 
    <item name="windowActionBar">false</item> 
</style> 

Splash trong nguồn drawable, trong đó có một nguồn tài nguyên bitmap, tôi phải tinh chỉnh một bit để làm cho nó trông hoàn hảo không kéo dài và ở giữa:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:antialias="true" 
    android:dither="true" 
    android:gravity="fill" 
    android:src="@drawable/splash_screen" /> 
Các vấn đề liên quan