2015-05-20 29 views
13

Vấn đề chính là màn hình splash xuất hiện sau 2-3 giây. Trước màn hình giật gân, bố cục trống xuất hiện mà tôi không muốn. Nếu không nó chạy tốt. Chỉ muốn xóa bố cục trống xuất hiện trước trang splash.màn hình trắng xuất hiện trước khi giật gân

MainActivity:

public class MainActivity extends Activity { 

    private static String TAG = MainActivity.class.getName(); 
    private static long SLEEP_TIME = 5; // Sleep for some time 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     this.requestWindowFeature(Window.FEATURE_NO_TITLE); // Removes title bar 
     this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); // Removes notification bar 

     setContentView(R.layout.activity_main); 

     // Start timer and launch main activity 
     IntentLauncher launcher = new IntentLauncher(); 
     launcher.start(); 
    } 

    private class IntentLauncher extends Thread { 

     @Override 
     /** 
     * Sleep for some time and than start new activity. 
     */ 
     public void run() { 
      try { 
       // Sleeping 
       Thread.sleep(SLEEP_TIME*1000); 
      } catch (Exception e) { 
       Log.e(TAG, e.getMessage()); 
      } 

      // Start main activity 
      Intent intent = new Intent(MainActivity.this, Login.class); 
      MainActivity.this.startActivity(intent); 
      MainActivity.this.finish(); 
     } 
    } 

} 

bố trí chính

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:background="@drawable/splash" 
    tools:context=".MainActivity" > 

</RelativeLayout> 
+1

bản sao có thể có của [Cách sửa màn hình trắng trên ứng dụng Khởi động?] (Http://stackoverflow.com/questions/20546703/how-to-fix-white-screen-on-app-start-up) – JPS

+1

Tại sao màn hình giật gân? Điều gì là tốt như vậy về một màn hình trong phần mềm của bạn mà không có gì nhưng làm cho người dùng chờ đợi cho ứng dụng của bạn để bắt đầu? – 2Dee

Trả lời

19

Màn hình splash nói chung không được đề xuất cho ứng dụng nhưng nếu bạn thực sự phải.

Android sẽ tải bố cục trống trước khi tải dựa trên chủ đề bạn đã đặt cho nó. Giải pháp là chủ đề của hoạt động giật gân trong suốt.

Tạo một chủ đề minh bạch trong res/values/styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.Transparent" parent="android:Theme"> 
     <item name="android:windowIsTranslucent">true</item> 
     <item name="android:windowBackground">@android:color/transparent</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:windowNoTitle">true</item> 
     <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
    </style> 
</resources> 

Sau đó thiết lập các chủ đề trong manifest

<activity android:name=".SplashActivity" android:theme="@style/Theme.Transparent"> 
... 
</activity> 
+0

Bạn đã cập nhật tệp styles.xml của mình thành sector11

+0

Chủ đề này không hoạt động với AppCompatActivity, cũng như, nó không loại bỏ thanh trạng thái. – NarendraJi

5

Chỉ cần đề cập đến các chủ đề trong suốt đối với các hoạt động khởi đầu trong file AndroidManifest.xml.

 <activity 
     android:name="first Activity Name" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     </activity> 
2

Đó là tính năng Android của bạn. Bạn có thể thay đổi màu nền của màn hình trắng. Sử dụng phong cách:

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

sau đó sử dụng nó trong manifest:

<application 
    android:name="@string/app_name" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/Theme.MainTheme" 
    > 
3

Vấn đề bạn đang phải đối mặt ở đây được gọi là 'sự khởi đầu lạnh' và đó là thời gian chủ yếu là chi tiêu trong phương pháp Application.onCreate của bạn, mà thường hiện một số ban đầu và nó có thể mất nhiều thời gian hơn bạn muốn. Bạn có thể đọc tại đây tài liệu chính thức: https://developer.android.com/topic/performance/launch-time.html

Nếu trường hợp này xảy ra hơn là đặt chủ đề thành mờ hoặc tắt xem trước như những người khác được đề xuất sẽ chỉ giải quyết vấn đề, bởi vì thực tế bạn sẽ cố gắng khởi chạy ứng dụng và bạn đã thắng không nhận được bất kỳ phản hồi nào về việc bạn đã nhấn vào biểu tượng ứng dụng. Bạn sẽ thấy ứng dụng của mình bắt đầu bằng độ trễ, không phải là UX mong muốn.

Màn hình trống, đen hoặc trắng, nó thực sự phụ thuộc vào thuộc tính android:windowBackground được chỉ định trong chủ đề hoạt động chính của bạn. Điều tốt nhất bạn có thể làm, ngoài việc di chuyển một số initialisations mà bạn có thể đang làm trong phương pháp Application.onCreate của bạn, là thương hiệu cửa sổ xem trước của bạn với một logo như đề xuất trong bài viết này:

https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd

Bạn có thể đi xa hơn và cải thiện trải nghiệm người dùng bằng cách làm nổi bật hình ảnh biểu tượng của bạn trong màn hình giật gân, nếu đó là trường hợp hoặc bằng cách thiết kế cửa sổ xem trước theo cách có thể chuyển sang nội dung hoạt động chính của bạn, như được mô tả tại đây:

http://saulmm.github.io/avoding-android-cold-starts

Cùng một câu hỏi được trả lời chính xác tại đây: https://stackoverflow.com/a/40482549/7094200 và được mô tả trong bài đăng trên blog này: https://www.bignerdranch.com/blog/splash-screens-the-right-way/

1

Thực sự! các liên kết dưới đây làm việc cho tôi !!!!

https://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/

viết theo phong cách riêng biệt trong style.xml cho màn hình của bạn để bạn có thể cùng liên quan cả hai màn hình.

Ở đây phong cách:

<style name="AppTheme.Splash" parent="AppTheme.NoActionBar"> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:windowBackground">@drawable/splash_final</item> 
    </style> 
3

Nó tốt hơn để sử dụng một theo chủ đề nền cho hoạt động khởi đầu của bạn, nhưng nếu bạn không muốn màn hình trống xuất hiện trước khi tung ra hoạt động chính, bạn có thể định nghĩa hoạt động của bạn như thế này :

Thêm android:windowDisablePreview để bạn AppTheme trong res/values ​​/ styles.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="AppTheme" parent="android:Theme"> 
     <item name="android:windowDisablePreview">true</item> 
    </style> 
</resources> 

Sau đó thiết lập chủ đề hoạt động của bạn trong biểu hiện của bạn:

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

Tái bút: Thiết android:windowDisablePreview không có tác dụng trên nền hoạt động của bạn, vì vậy bạn không có gì phải lo lắng.

Các vấn đề liên quan