博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
沉浸式状态栏解析
阅读量:7230 次
发布时间:2019-06-29

本文共 2136 字,大约阅读时间需要 7 分钟。

基础知识:

  • statusBar 和navigationBar 都是覆盖在 phoneWindow 上面,PhoneWindow 的 DecorView 内容会 padding 出两个Bar的高度!
  • api 21之后可以 statusBar 设置 SystemUi ,api19-20 可以通过 window 设置FLAG_TRANSLUCENT_STATUS。最终使得 fitsSystemWindows 属性可以控制这部分 padding 空间,默认 false去掉 padding , true 保留 padding。

用过度重绘就可以很明显的看到这个结论 借用黄老师的掌阅来说明这个问题。

着色状态栏

Android api 19-20

1. 全屏设置 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)2. 通过 fitsSystemWindows=true 保留 padding,设置 window 的背景色2. 或者在 decorView 上添加 View 设置背景色复制代码
  • Android api 21-
1.getWindow().setStatusBarColor(Color.RED) 即 colorPrimaryDark复制代码

渐变状态栏

Android api 19-20

1. 全屏设置 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)2. 通过 fitsSystemWindows=true 保留 padding,设置 window 渐变的 Drawable复制代码
  • Android api 21-
1. 全屏设置 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);2. StatusBar 颜色透明 getWindow().setStatusBarColor(Color.TRANSPARENT);3. 通过 fitsSystemWindows=true 保留 padding,设置 window 的渐变的 Drawable复制代码

背景状态栏

Android api 19-20

1. 全屏设置 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)2. 通过 fitsSystemWindows=true 保留 padding, 设置 window 的背景图复制代码
  • Android api 21-
1. 全屏设置 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);2. StatusBar 颜色透明 getWindow().setStatusBarColor(Color.TRANSPARENT);3. 通过 fitsSystemWindows=true 保留 padding,设置 window 的背景图复制代码

最后案例

直接在theme中设置fitsSystemWindows

true
复制代码

建议在BaseActivity中的onCreate设置

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {            getWindow().setStatusBarColor(Color.TRANSPARENT);            getWindow().getDecorView()                    .setSystemUiVisibility(                            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN                                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);        }        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);        }        getWindow().setBackgroundDrawableResource(R.drawable.bg_bar);复制代码

感谢

转载地址:http://czcfm.baihongyu.com/

你可能感兴趣的文章
Oracle——18用户、角色和权限信息的视图总结
查看>>
WordPress 中的 Debug 模式(调试模式)
查看>>
node下使用express框架,ejs模板引擎
查看>>
搜索:文本的匹配算法
查看>>
Fedora 17 LibreOffice 办公套件的安装与汉化
查看>>
scrollview不充满屏幕的原因
查看>>
PHP单例模式
查看>>
解密敏捷自动化测试
查看>>
DelphiMVC拦截器介绍
查看>>
Spring Cloud构建微服务架构:分布式配置中心【Dalston版】
查看>>
iOS 11正式版终于来了!强力助攻小程序
查看>>
开放平台API接口调用频率控制系统设计浅谈
查看>>
Lucene4.3进阶开发之潜龙勿用( 七)
查看>>
DTD和schema小总结
查看>>
去掉导航栏的黑线
查看>>
怎样让html加载完毕后加载js代码
查看>>
piwik 案例介绍
查看>>
敏感字过滤
查看>>
为什么我们要从 NodeJS 迁移到 Ruby on Rails
查看>>
Android 文件式数据库Realm
查看>>