Android沉浸式状态栏最省事的解决方案
16lz
2021-12-04
要实现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> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> - "colorPrimary"
>@color/colorPrimary - "colorPrimaryDark">@color/colorPrimaryDark
- "colorAccent">@color/colorAccent
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”
也不要了。像状态栏高度也不用考虑了。
但是要注意的是,默认状态栏的颜色在主题样式中
这个配置的。而且状态栏颜色也跟activity顶层布局的背影颜色也没有关系。所以我们要设置状态栏颜色就必须通过全局主题配置,或者代码修改statusBarColor设置。
所以现在是不是省事很多了,activity代码也少了很多,项目更加整洁清晰了。
更多相关文章
- Android(安卓)NDK
- Android高手进阶教程(二十五)之---Android(安卓)中的AIDL!!!
- Android特色开发之传感器和语音识别
- Android日志系统Logcat源代码简要分析
- Android(安卓)MVP设计模式介绍(附简单Demo下载)
- android实用代码片段
- Android(安卓)Handler 分析学习
- inflater在ListView中的使用
- Android(安卓)开机自动启动服务