Android 控制状态栏和导航栏

温故

开始记录前,还是先引用前辈们经典的示意图

Android 控制状态栏和导航栏_第1张图片

其中,statusBarColor和navigationBarColor就是本文的主角。

沉侵式

先上一张原始图片

Android 控制状态栏和导航栏_第2张图片

接下来就来看看沉侵式的效果

Android 控制状态栏和导航栏_第3张图片

是不是有种身临其境的感觉呢?这就是沉侵式UI的魅力。通过XML样式配置需要在res文件夹下面建立values-v19values-v21两个文件夹

Android 控制状态栏和导航栏_第4张图片

values-v19styles.xml中对应的配置样式中增加如下配置项

这里需要注意的是,样式风格继承自Theme.AppCompat.Light.NoActionBar,去掉了标题栏

这样配置比较简单,但是有个问题,如果我只想透明标题栏,而保留底部导航栏呢?第一时间反应是

遗憾的是,失败了!下面先附上正确的设置方式

    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
    private void translucent(boolean translucentStatus, boolean translucentNavigation) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = getWindow();
            window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
            if (translucentStatus) window.setStatusBarColor(Color.TRANSPARENT);
            if (translucentNavigation) window.setNavigationBarColor(Color.TRANSPARENT);
        }
    }

这个方法得在setContentView()之前调用,调用translucent(true, false)的效果图如下

Android 控制状态栏和导航栏_第5张图片

可以看到,保留了底部导航栏,但问题来了,上下控件占用了状态栏和导航栏的空间,这个时候,android:fitsSystemWindows="true"的作用该体现了!在布局文件根元素添加该属性后,效果图如下

Android 控制状态栏和导航栏_第6张图片

你可能感兴趣的:(基础知识)