沉浸式状态栏实现
首先沉浸式是在系统4.4及以上才有的,最少要api19才可以使用.
沉浸式的实现分为2种:1、全屏模式(5.0以上直接都使用全屏模式) 2、着色模式(4.4-5.0)(这个我个人其实觉得可以不用)
效果图如下
效果图(在7.0系统上)可说明如下几点:
1.效果图1部分表明设置透明状态栏生效,也说明fitsSystemWindows = true 会给系统View 预留出空间,如状态栏 导航栏,fitsSystemWindows = true只有设置在根root或者第一个子view才生效,系统默认是false(但是这哥地方也留出了toolbar区域 这个不太理解)
2.导航栏是否透明这个效果图是看不出来的 但是实际上是生效的 这个自己手动尝试就可以
第一坑:状态栏背景色
上面的FLAG_TRANSLUCENT_STATUS 只是把状态栏设置为透明的,但是!但是,状态栏是有背景色的,一些手机的状态栏背景色为透明,而一些手机的状态栏背景色为半透明的黑色(是5.0以上的机子),实现的效果如下:
clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)必须跟setStatusBarColor(这个是在5.0及以上系统设置状态栏背景色的)一起使用 如果不设置setStatusBarColor 状态栏会没有沉浸式,同时状态栏设置了getWindow().getDecorView().setSystemUiVisibility(SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);白底黑字也不生效
(这个地方需要注意的是 是clearFlags状态栏而不是addFlags状态栏 跟效果图1代码有点不一样 这地方我也很疑惑,日后找到原因再补充)
沉浸式系列文章
1.沉浸式的坑blog.csdn.net/brian512/ar…
2.状态栏实现白底黑字www.jianshu.com/p/7f5a9969b…
3.实现基类沉浸式www.jianshu.com/p/fc5854895…
4.通过theme实现沉浸式,以及处理actionbar跟侧滑栏沉浸式问题www.jianshu.com/p/dc20e98b9…
5.提供了沉浸式的轮子www.jianshu.com/p/752f4551e…
setSystemUiVisibility的使用,主要是为了处理全屏的问题
1.www.jianshu.com/p/08ff70c15…
(感觉SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN在实现了沉浸式的情况并不会挤压activity高度 SYSTEM_UI_FLAG_HIDE_NAVIGATION也是在实现了沉浸式的情况下使得导航栏出现的时候不会挤压activity高度,导航栏会覆盖在activity之上)
SYSTEM_UI_FLAG_IMMERSIVE和SYSTEM_UI_FLAG_IMMERSIVE_STICKY区别在于
SYSTEM_UI_FLAG_IMMERSIVE_STICKY通过系统上滑或者下滑拉出导航栏后会自动隐藏。
而SYSTEM_UI_FLAG_IMMERSIVE不会自动隐藏
SystemUI Flag详解及使用情景
www.jianshu.com/p/e6656707f…
WindowManager.LayoutParams的各种flag含义
www.jianshu.com/p/d56f8f68e…
Toolbar:CollapsingToolbarLayout的使用
blog.csdn.net/a553181867/…
CollapsingToolbarLayout 和AppBarLayout
www.jianshu.com/p/d83b5e870…
Android如何实现超级棒的沉浸式体验
www.cnblogs.com/qcloud1001/…