本来研究了1天的状态栏,准备截图录屏上手写笔记了,然后看到了这个
Android 系统状态栏沉浸式/透明化完整解决方案
,然后我就把截图啊啥的delete~~~去了,大纲都删了QAQ
5月17日意外发现
Android开发:Translucent System Bar 的最佳实践
不过还是整理下吧,作为补充
实现状态栏透明化
①. 使用主题,只要是带Translucent的(当然这是活动是继承自Activity而不是AppCompatActivity)
<style name="Scr" parent="android:Theme.Holo.Light.NoActionBar.TranslucentDecor" />
② 普通的主题下加上
<item name="android:windowTranslucentStatus">true</item>
注意!!!布局xml里root节点下加了
android:fitsSystemWindows="true"
作用大致就是扩张显示到全屏,上面那篇博文的中间往后位置有图有介绍
由
未沉浸前
变成了这样
沉浸
其实感觉变丑了
类似的这里头还可以设置把导航栏的虚拟按键也设置成透明的
<item name="android:windowTranslucentNavigation">true</item>
像这样
③有时候会发现在主题了设置的属性没有起作用,那就只能在code中撸一遍了
只要在Activity加载布局之后添加
Window window = getWindow();
//状态栏透明
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//类似的,这个是导航栏透明
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
//这里还有很多FlAG,更多请查API文档
......
当然有个高级的使用方式,这么写
WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
localLayoutParams.flags = (WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | localLayoutParams.flags);
当前的属性标签和自己想设置的一个都不会漏
状态的颜色设定
来看张图吧
里面这些对应的是Activity主题的item
比如
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
修改颜色只需要更改color值
例外有个开源库SystemBarTint
它可以设定和改变状态栏的背景色,不过在版本19以上完全可以用透明模式背景来给状态栏啊导航栏染色了。
网友评论