Android沉浸式状态栏最省事的解决方案

要实现Android沉浸式状态栏,就不得不面对一大推兼容性问题。
下面两篇文章的做法或许大家都试过:

Android 沉浸式状态栏的实现

Android 沉浸式状态栏完美解决方案

第一篇讲到了各种方法解决兼容性问题,不过太繁琐。第二篇文章干脆就复制粘贴一个工具类,相比下思路简单多了,但是要注意的地方也不少。不过他们都是为了兼容5.0以下才会有如此麻烦繁琐的步骤。举个例子,它们状态栏颜色要么是顶层布局的背景颜色,要么就是添加一个状态栏占位层,要么添加一堆难理解的代码,还要让状态栏显示高度在布局中设置android:fitsSystemWindows=“true”等等一些操作。
我这里就教大家另外一种全新的方法:拒绝兼容5.0以下。这种方法更加简单、不需要考虑各种兼容问题。

首先,把我们工程最低兼容版本修改成api21:

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.devnn.kotlindemo"
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

其次,修改app主题,去掉actionbar。

一般我们都不用actionbar。不去掉也行,直接使用actionbar作为导航栏也可以。不影响。这里去掉会更加直观。

<resources>
<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
</resources>

最后,我们如果要修改状态栏的颜色就使用一句代码就行了:

kotlin:

//不管是否使用actionbar主题,下面这句代码都有效(api21及以上)
window.statusBarColor =ContextCompat.getColor(this,R.color.colorAccent)

java:

//不管是否使用actionbar主题,下面这句代码都有效(api21及以上)
getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.colorAccent))

其它的就什么也不需要做了。像android:fitsSystemWindows=“true”也不要了。像状态栏高度也不用考虑了。
但是要注意的是,默认状态栏的颜色在主题样式中
<item name="colorPrimaryDark">@color/colorPrimaryDark</item> 这个配置的。而且状态栏颜色也跟activity顶层布局的背影颜色也没有关系。所以我们要设置状态栏颜色就必须通过全局主题配置,或者代码修改statusBarColor设置。
所以现在是不是省事很多了,activity代码也少了很多,项目更加整洁清晰了。

原创文章 56 获赞 44 访问量 9万+

猜你喜欢

转载自blog.csdn.net/devnn/article/details/83510582