Android-transulcent-status-bar总结
来源:互联网 发布:yaml nginx 编辑:程序博客网 时间:2024/05/16 12:55
原文出处:http://niorgai.github.io/2016/03/20/Android-transulcent-status-bar/
最近业务上看到一个设计图挺好看,所以研究了一下透明状态栏,注意不是沉浸式状态栏,在参考了网上的一些资料后,整理出了这篇博客.
Github Demo 链接: StatusBarCompat
参考文章:
由沉浸式状态栏引发的血案
Translucent System Bar 的最佳实践
该使用 fitsSystemWindows 了!
首先强调,对于状态栏的处理有两种不同的方式, 这里从Translucent System Bar 的最佳实践直接盗了两张图做对比~.
先定义几个名词:
全屏模式: 左边图所示.
着色模式: 右边图所示.
ContentView: activity.findViewById(Window.ID_ANDROID_CONTENT) 获取的 View , 即 setContentView 方法所设置的 View, 实质为 FrameLayout.
ContentParent: ContentView 的 parent , 实质为 LinearLayout.
ChildView: ContentView 的第一个子 View ,即布局文件中的 layout .
再介绍一下相关的函数:
fitsSystemWindows, 该属性可以设置是否为系统 View 预留出空间, 当设置为 true 时,会预留出状态栏的空间.
ContentView, 实质为 ContentFrameLayout, 但是重写了 dispatchFitSystemWindows 方法, 所以对其设置 fitsSystemWindows 无效.
ContentParent, 实质为 FitWindowsLinearLayout, 里面第一个 View 是 ViewStubCompat, 如果主题没有设置 title ,它就不会 inflate .第二个 View 就是 ContentView.
5.0以上的处理:
自5.0引入 Material Design ,状态栏对开发者更加直接,可以直接调用 setStatusBarColor 来设置状态栏的颜色.
全屏模式:
着色模式:
4.4-5.0的处理:
4.4-5.0因为没有直接的 API 可以调用,需要自己兼容处理,网上的解决方法基本都是创建一下高度为状态栏的 View ,通过设置这个 View 的背景色来模拟状态栏. 这里我尝试了三种方法来兼容处理.
方法1: 向 ContentView 添加假 View , 设置 ChildView 的 marginTop 属性来模拟 fitsSystemWindows .
全屏模式:
着色模式:
方法2: 向 ContentParent 添加假 View ,设置 ContentView 和 ChildView 的 fitsSystemWindows.
全屏模式:
着色模式(会有一条黑线,无法解决):
方法3:向 ContentView 添加假 View , 设置 ChildView 的 fitsSystemWindows.
全屏模式:
着色模式:
其实全屏模式在三种模式下实现都是一样的,主要是着色模式实现不同.
对比一下三种着色模式实现的方式:
总结
StatusBarCompat2 主要问题不能切换.
StatusBarCompat1 在4.4上会有一条黑线, 如果可以解决我觉得这是最靠谱的解决方法.
StatusBarCompat 类算是我最后给出的解决方案吧, 目前使用效果比较完善.推荐使用
用户可以随时在同一个 Activity 中切换不同的状态栏模式.
就算子 View 重写了 dispatchFitSystemWindows 也不会有影响.
- Android-transulcent-status-bar总结
- Android-transulcent-status-bar总结
- Android-transulcent-status-bar总结
- Android-transulcent-status-bar
- (4.2.37.2)Android-transulcent-status-bar
- http://niorgai.github.io/2016/03/20/Android-transulcent-status-bar/
- android status bar 之 status bar notifications
- Android Status Bar
- ios开发-status bar总结
- Android navigation bar and the status bar
- Android的status bar分析
- Android的status bar分析
- android-status bar :状态栏通知
- Android透明状态栏status bar
- 【android】隐藏title bar和system navigation bar,status bar
- Status bar
- Android 实现Navigation Bar和Status Bar全透明
- Android 4.4 实现透明状态栏Translucent system bar(Status bar)
- WKWebView 遇到过的坑
- nyoj-106-背包问题
- Java -- 泛型
- c51-i2c协议代码实现
- MTK平台LED配置
- Android-transulcent-status-bar总结
- 汉诺塔递归与非递归
- (转)开发仅用两天三个人,谈谈小咖秀背后的技术故事
- C++标准模板库<algorithm>下的函数sort
- 1086: 去掉双斜杠注释
- 链表 进栈出栈遍历清空
- python制作pdf电子书
- spring mvc4处理日期格式问题
- 算法提高 质因数2