一、闪屏页
闪屏页就是app点击后打开的第一个activity,要求立即显示出页面图片;app打开页面默认会出现白板或黑板,这是因为没有设置
android:windowBackground
窗口背景就是第一眼看到的颜色(白色或黑色);紧接着才会加载布局并展示出来。所以闪屏页一般没有layout布局文件,直接用style样式来完成:
<!--闪屏页面布局-->
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/splash_bg</item>
<item name="android:statusBarColor">@color/transparent</item>
</style>
<activity
android:name=".view.activity.SplashAct"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
在SplashAct.java的代码中无需写任何代码。
@drawable/splash_bg 是ui切的一张图片,设置给windowBackground属性即可;然后把statusBarColor设置为透明即可;
二、普通activity页面
建议不要使用style的形式;通常会写 BaseActivity ,并且在BaseActivity中设置好 AppBarLayout;
1.AppBarLayout 的最顶布局中,设置 android:fitsSystemWindows="true" 一路设置到希望显示背景颜色的地方;
2.在 BaseActivity 的 onCreate() 方法中写上如下代码:
//透明状态栏效果
if (Build.VERSION.SDK_INT >= 21) {
getWindow().setStatusBarColor(Color.TRANSPARENT);
View decorView = getWindow().getDecorView();
int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
}
把statusBarColor设置为透明;
把DecorView的 systemUiVisibility 属性设置为:状态栏悬浮于Activity之上;
关于常量:
View.SYSTEM_UI_FLAG_LAYOUT_STABLE//保持整个View稳定, 常跟bar 悬浮, 隐藏共用, 使View不会因为SystemUI的变化而做layout
View.SYSTEM_UI_FLAG_LOW_PROFILE//隐藏状态栏图标
View.SYSTEM_UI_FLAG_FULLSCREEN//隐藏状态栏
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN//状态栏悬浮于activity之上
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR//状态栏字体浅色
View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR//导航栏字体浅色
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION//隐藏导航栏
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION//导航栏悬浮于activity之上
View.SYSTEM_UI_FLAG_IMMERSIVE//呼出隐藏的bar后不会再隐藏掉
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY//呼出隐藏的bar后会自动再隐藏掉
其中还有导航栏的设置,可以自行修改看看;
注意常量:
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR//状态栏字体浅色 View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR//导航栏字体浅色
主要是把状态栏的导航栏的图标文字的颜色改为黑色;当你的页面适配为白色或浅白色图片时,本来的白色状态栏时间、电池图标等等可能不容易看出来,可以使用这个常量。