应用在启动的时候,有时候有白屏/黑屏,之所以会看到白屏或者黑屏,是和我们的主题有关系的,因为系统默认使用的主题,背景色就是白色/黑色。那么我们自定义一个主题,让默认的样式就是我们想要的,就优化了白屏/黑屏的问题。
设置闪屏页SplashScreenActivity的style;
<!--应用Style设置开始-->
<!-- 应用主题-->
<style name="AppTheme" parent="AppTheme.Base"></style>
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 隐藏ActionBar -->
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
<!-- 使用 API Level 22 编译的话,要拿掉前缀字 -->
<item name="windowNoTitle">true</item>
<!-- 状态栏颜色-->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!--应用默认颜色-->
<item name="android:windowBackground">@color/white</item>
<item name="android:fitsSystemWindows">true</item>
<!--界面切换方式-->
<item name="android:windowAnimationStyle">@style/translate</item>
</style>
<!-- 闪屏页 -->
<style name="StartAppTheme" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
</style>
AndroidManifest.xml
<activity
android:name=".activity.SplashActivity"
android:theme="@style/StartAppTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
SplashScreenActivity
package com.tibi.notebook.activity;
import android.content.Intent;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.WindowManager;
import com.tibi.notebook.R;
public class SplashScreenActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 不显示系统的标题栏,保证windowBackground和界面activity_main的大小一样,显示在屏幕不会有错位(去掉这一行试试就知道效果了)
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_splash_screen);
//模拟验证账号密码,做一些工具的初始化等等的操作
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(SplashScreenActivity.this, HomeActivity.class));
finish();
}
}, 2000);
}
}