2013-06-04 50 views
11

Tôi muốn biết cách đạt được hiệu ứng này.Android - Vô hiệu hóa cửa sổ khởi động giả của ứng dụng

Ứng dụng của tôi (mặc định mọi thứ), khi biểu tượng trình khởi chạy được nhấp, ngay lập tức hiển thị một số loại cửa sổ giả trống, không có gì xảy ra và sau đó tải bố cục vào đó.

Ứng dụng "nặng hơn" như YouTube, Drive, Dropbox, v.v. khi bắt đầu, dường như chờ sau khi khởi chạy, không hiển thị cửa sổ giả và tải ngay vào bố cục sẵn sàng.

Bất kỳ ý tưởng nào về cách thực hiện việc này hoặc nơi tôi nên xem xét?

Cảm ơn

// EDIT: đây không có gì để làm với một cái gì đó giống như cơ sở dữ liệu tải, nơi tôi sẽ hiển thị ProgressBar, IMHO này đã làm với những thứ trước khi hoạt động tồn tại.

Trả lời

10
<style name="Theme.MyTheme" parent="android:style/Theme" > 
    .... 
    <item name="android:windowDisablePreview">true</item> 
    .... 
</style> 

nhưng sử dụng một cách thận trọng

0

Bạn có thể gọi phương thức setContentView ở bất cứ nơi nào bạn muốn trong hoạt động của mình. Trước khi gọi phương thức này, nó sẽ hiển thị một màn hình trống. Nếu bạn muốn màn hình giật gân, bạn có thể gọi phương thức setContentView trong phương thức onCreate để hiển thị chế độ xem màn hình giật gân. Sau đó, khi bạn đã sẵn sàng để hiển thị chế độ xem "chính", bạn có thể sử dụng LayoutInflater để hiển thị. Tôi cũng khuyên bạn nên sử dụng một số ProgressDialog để hiển thị cho người dùng thông tin đang tải.

+0

Vấn đề là, ứng dụng của tôi có rất nhiều tài nguyên tĩnh, vì vậy, tôi đoán là những ứng dụng được tải trước khi hoạt động tồn tại, vì vậy đó là lý do tại sao cửa sổ trống đó. Sau đó, trong hoạt động tôi có bộ tải con trỏ và tôi đang hiển thị ProgressBar, mà chỉ nhấp nháy thông qua cơ sở dữ liệu không phải là lớn. .. Những gì tôi muốn tránh là cửa sổ giả đầu tiên ở tất cả, không có màn hình giật gân, như những ứng dụng được đề cập làm. – urSus

0

Tải tài nguyên của bạn trước khi đặt chế độ xem nội dung. Sẽ có một cửa sổ giả cho đến khi bạn không đặt chế độ xem bằng cách sử dụng setContentView.

EDIT Để tránh màn hình này. Thực hiện thay đổi đối với mã của bạn.

1) Không thực hiện bất kỳ công việc nặng nhọc nào trong hoạt động trên phương pháp Tạo. Chạy một chuỗi riêng cho nó.

2) Thiết lập xem nội dung ngay sau khi super.onCreate() dòng

super.onCreate(savedInstanceState); 
    setContentView (R.layout.splash_screen); 

3) Áp dụng sau chủ đề cho ứng dụng của bạn.

Xác định chủ đề trong phong cách

<resources> 
<style name="Theme.MyTheme" parent="android:style/Theme" > 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowBackground">@drawable/any_default_background</item> 

</style> 
</resources> 

Trong Manifest của bạn

 <application 
     .... 

     android:theme="@style/Theme.MyTheme" 
     .... 
     > 

Thats It.

+0

Điều đó không có ý nghĩa với tôi. Tôi nên tải các tài nguyên trước khi setContentView() và cửa sổ giả sẽ được hiển thị cho đến khi setContentView không được thiết lập, phải không? Tôi không muốn cửa sổ giả đó. – urSus

+0

Sau đó, nó không phải là một hành vi ứng dụng tốt để cho phép người dùng chờ đợi cho ứng dụng mà không hiển thị bất kỳ màn hình bắt đầu. Bạn sẽ hiển thị một số màn hình giật gân trong khi tài nguyên của bạn đang được tải trong nền. – Adnan

+0

Chỉ một hoặc hai giây, nhưng cửa sổ trống đó phát ra UX xấu trong opionion của tôi, vì vậy tôi muốn bỏ qua nó. Các ứng dụng của Google cũng làm như vậy (Gmail hiển thị cửa sổ giả, Drive không kiểm tra)/Khi tôi tải cơ sở dữ liệu, tôi đang hiển thị thanh tiến trình, nhưng theo ý kiến ​​của tôi, tôi đang chờ tất cả các tài nguyên tĩnh, v.v. hoạt động. – urSus

0

này sẽ tạo ra một cửa sổ xem trước tùy chỉnh cho hoạt động của bạn.

Tạo một phong cách trong styles.xml như

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

Trong tập tin Manifest của bạn sử dụng các chủ đề đã tạo ở trên. Đối với ví dụ:

<activity android:name=".MyActivity" 
    android:label="@string/app_name" 
    android:theme="@style/MyTheme" 
    /> 

Trong hoạt động của bạn thay đổi hình nền của cửa sổ trở lại null trong onCreate()

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setBackgroundDrawable(null); 
    setContentView(R.layout.main); 
} 
22

Tôi đề nghị bạn không vô hiệu hóa các cửa sổ tải giả sử dụng:

<style name="Theme.MyTheme" parent="android:style/Theme" > 
    .... 
    <item name="android:windowDisablePreview">true</item> 
    .... 
</style> 

vì bạn có thể gặp phải một số sự cố. Ví dụ: nếu bạn cố gắng tạo hoạt ảnh cho AlertDialog, hãy nhập hoạt ảnh sẽ không hoạt động (trải nghiệm cá nhân).

Giải pháp đúng là đặt chủ đề của ứng dụng giống như màn hình hoạt động chính của bạn (cùng một kiểu ActionBar, cùng màu nền). Trong ứng dụng của tôi sau khi thử nghiệm severals tôi tìm thấy giải pháp phù hợp với nhu cầu của tôi. (Tôi có một hoạt động chính với nền trống, không có ActionBar, chỉ toàn màn hình bố trí cá nhân)

1 - styles.xml: thêm phong cách mới như thế này (loại bỏ ActionBar và thiết lập màu nền cùng các hoạt động chính của tôi)

<style name="LoadingTheme" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen"> 
    <item name="android:windowBackground">@color/white_smoke</item> 
</style> 

2 - AndroidManifest.xml: set theme của tôi cho hoạt động chính để "LoadingTheme"

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.company.appname.MainActivity" 
      android:label="@string/app_name" 
      android:theme="@style/LoadingTheme"> 
     <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
    </activity> 
    .... 
</application> 

Và cuối cùng tôi có đầy đủ cửa sổ tải giả trống mà không có ActionBar với tải MainActivity mềm và hình động làm việc.

Hy vọng sẽ hữu ích.

+1

Tác phẩm này, không cần giải pháp khác! –