1、只是activity实现沉浸式的状态
1、先在ActivityManifest.xml 中配置 activity的主题:android:theme="@style/Theme.AppCompat.Light.NoActionBar"
<activity
android:name=".ui.activity.MainActivity"
android:launchMode="singleTask"
android:screenOrientation="portrait"
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
2、代码设置状态栏属性
(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN--全屏;View.SYSTEM_UI_FLAG_LAYOUT_STABLE--状态栏字体白色)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.setStatusBarColor(Color.TRANSPARENT);//设置状态栏背景是透明
}
3、activity的根节点不要加
android:fitsSystemWindows="true"这个属性,加了就会有状态栏展示;
2、activity中包含fragment切换,状态栏动态切换的问题
1、同上 android:theme="@style/Theme.AppCompat.Light.NoActionBar"
2.、使用代码设置不同fragment页面状态栏属性
@Override
public void onPageSelected(int position) { //改变状态栏的方法(系统5.0以上)
switch (position) {
case 0:
setTransparentStatusBar();
break;
case 1:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
break;
case 2:
setTransparentStatusBar();
break;
default:
break;
}
}
public void setTransparentStatusBar() {
if(Build.VERSION.SDK_INT >= 21) {
Window window = getWindow();
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.setStatusBarColor(Color.TRANSPARENT);
}
}
3、忽略第三点,还需要验证(activity根节点一定 不要 不要 不要加android:fitsSystemWindows="true"这个属性)
fragment需要沉浸式时候,根节点也不加android:fitsSystemWindows="true"这个属性
如果只是像第二个页面一样,设置状态栏透明或者白色 ,状态栏字体是灰色 ,根节点不需要加android:fitsSystemWindows="true"