android实现标题栏、状态栏图标文字颜色及背景动态变化

1、只是activity实现沉浸式的状态

1、先在ActivityManifest.xml 中配置 activity的主题: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"这个属性,加了就会有状态栏展示;

android实现标题栏、状态栏图标文字颜色及背景动态变化_第1张图片

2、activity中包含fragment切换,状态栏动态切换的问题

android实现标题栏、状态栏图标文字颜色及背景动态变化_第2张图片

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"

 

参考:https://www.jianshu.com/p/4a5ff4e2c298

你可能感兴趣的:(android,状态栏,标题栏,状态栏透明,沉浸式,android开发基本)