当前位置: 首页 > news >正文

沉浸式状态栏解析

基础知识:

  • 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

<item name="android:fitsSystemWindows">true</item>
复制代码

建议在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);
复制代码

感谢

全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现

相关文章:

  • 若要允许 GET 请求,请将 JsonRequestBehavior 设置为 AllowGet
  • Spring Cloud微服务分布式云架构简介
  • centos7 mysql 5.7 yum安装
  • Maven单独构建多模块项目中的单个模块
  • 常用页面校验整合
  • java spring事务管理相关
  • HTML5 a标签的download属性
  • 正向代理,反向代理(图片解析)
  • nginx常用命令
  • 雾计算简史
  • php memcached(windows linux) 的安装及应用 2011-04-08
  • Go channel 实现归并排序中的 merge 函数
  • Redis源码解析--Replication
  • 网站Web项目树形菜单的实现过程(ExtJS+SpringMVC+Spring+Hibernate+MySQL)
  • ES6简单总结(搭配简单的讲解和小案例)
  • 0x05 Python数据分析,Anaconda八斩刀
  • Bootstrap JS插件Alert源码分析
  • Docker: 容器互访的三种方式
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • js写一个简单的选项卡
  • KMP算法及优化
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • overflow: hidden IE7无效
  • vagrant 添加本地 box 安装 laravel homestead
  • vue:响应原理
  • vue-router的history模式发布配置
  • 大数据与云计算学习:数据分析(二)
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何实现 font-size 的响应式
  • 深度学习在携程攻略社区的应用
  • 数组的操作
  • 一文看透浏览器架构
  • 最近的计划
  • 你对linux中grep命令知道多少?
  • Nginx实现动静分离
  • #162 (Div. 2)
  • #define用法
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (27)4.8 习题课
  • (9)STL算法之逆转旋转
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • (四)Controller接口控制器详解(三)
  • (一)WLAN定义和基本架构转
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • **PHP分步表单提交思路(分页表单提交)
  • .NET Core 和 .NET Framework 中的 MEF2
  • .Net MVC4 上传大文件,并保存表单