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

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"

参考:android标题栏、状态栏图标文字颜色及背景动态变化 - 简书

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值