写在前面
本文提供自己开发中的一些实现心得,希望对各位路过的基友有一定的启发意义。
- 框架实现
我推荐两个实现工具:
StatusBarUtil
gyf-dev/ImmersionBar
具体使用请参考具体文档,这里不作详细介绍。 - 自己动手
在Android 5.0 后,对实现Android 沉浸式状态栏越来越简单,官方提供了很多相关的api,具体文档请移步Android 中国查看相关 api。
Android 5.0以上在vaues-21下配置xml 达到沉浸式状态栏效果:
<item name="android:windowTranslucentStatus">false</item>
<!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:fitsSystemWindows">true</item>
就这几句代码在Android 5.0 以上基本能满足实现沉浸式状态栏效果了。但是有种特殊情况:在fragment里顶部是图片或纯色和渐变色,顶部状态栏不会全透明,这里就不上图了。
解决这种问题的思路:全屏 + 显示状态栏,为了普通界面能正常显示在界面隐藏后记得清除flag。
//全屏/显示状态栏
protected void fullScreenOrShowStatusBar(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
}
//清除
protected void clearfullScreenOrShowStatusBar(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
}
至此,一个项目沉浸式状态栏的适配基本能完美实现了,这里就不去讨论那些走非主流的rom了,我的项目走主流就可以了。
总结:
个人不喜项目里大大小小一堆框架,喜欢思考根据项目实际情况解决问题。提出此方案在此,欢迎指正 !