Android(安卓)沉浸式状态栏归纳
16lz
2021-01-26
参考文章1
参考文章2
沉浸式状态栏就是将标题栏颜色与状态栏颜色设置为同一种颜色,Android不同的版本设置沉浸式方法也不大一样.
4.4时设置沉浸式状态栏方法
- 代码设置或者主题设置
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
主题设置,在values-v19
文件夹下
<style name="MDTheme" parent="Theme.Design.Light.NoActionBar"> - "android:windowTranslucentStatus"
>truestyle>
- 这样设置以后,标题栏会上移动与状态栏重合.想要标题栏下移就得往
decorView
布局容器中加入一个与状态栏宽高一样的View
,并且设置这个View
背景与标题栏颜色一样,这样一来就能实现沉浸式的状态栏了.
// 伪代码// 1.获取当前Activity的decorView对象, 最开始decorView中有标题栏View和内容栏View,ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();// 2.将创建的View添加到decorView中decorView.addView(myView)// 3.设置不为状态栏留空间// rootView代表自己写的Activity布局解析后的ViewViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);// 忽略用户为childView设置的padding属性,将由系统为该View设置paddingTop属性,高度值为状态栏的高度.ViewCompat.setFitsSystemWindows(rootView,true);// 设置childView不在padding代表的区域中绘制.rootView.setClipToPadding(true);
经过以上两步就能够使状态栏的背景与标题栏颜色一致了.
5.0时设置沉浸式状态栏方法
- 用代码的方式设置
// 首先设置状态栏的颜色getWindow().setStatusBarColor(getResources().getColor(android.R.color.read));// 这个标记的意思是绘制一个背景透明的状态栏,然后用StatusBarColor中的颜色去填充,上面一步已经设置了StatusBarColor的颜色getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);// 最后还要清楚清除这个标记getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
- 用主题配置的方式设置
在values-v21
文件夹下面添加主题
<style name="MDTheme" parent="Theme.Design.Light.NoActionBar"> - "android:windowTranslucentStatus"
>false - "android:windowDrawsSystemBarBackgrounds">true
- "android:statusBarColor">@android:color/read
style>
6.0时设置沉浸式状态栏方法
6.0沉浸式设置的方法和5.0差不多.6.0做了一点优化,就是可以修改状态栏上的字体颜色与图标颜色.
- 用代码方式设置
// 首先设置状态栏的颜色getWindow().setStatusBarColor(getResources().getColor(android.R.color.read));// 这个标记的意思是绘制一个背景透明的状态栏,然后用StatusBarColor中的颜色去填充,上面一步已经设置了StatusBarColor的颜色getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);// 最后还要清楚清除这个标记getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);// 设置状态栏上字体颜色和图标颜色为浅黑色的getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
- 用主题配置的方式设置
在values-v23
文件夹下面添加主题
<style name="MDTheme" parent="Theme.Design.Light.NoActionBar"> - "android:windowTranslucentStatus"
>false - "android:windowDrawsSystemBarBackgrounds">true
- "android:statusBarColor">@android:color/holo_red_light
- "android:windowLightStatusBar">true
style>
布局如何延申到状态栏区域
- 4.4时设置方法
- 代码设置
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
- 主题设置,在
values-v19
文件夹下
<style name="MDTheme" parent="Theme.Design.Light.NoActionBar"> - "android:windowTranslucentStatus"
>true style>
- 5.0时设置方法
// 1. 设置状态栏透明 getWindow().setStatusBarColor(Color.TRANSPARENT) // 这个标记的意思是绘制一个背景透明的状态栏,然后用StatusBarColor中的颜色去填充. getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); // 2. 视图延伸至状态栏区域,状态栏上浮于视图之上 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) // 最后还要清除这个标记 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
- 6.0时设置方法
// 1. 设置状态栏颜色透明 getWindow().setStatusBarColor(Color.TRANSPARENT) // 这个标记的意思是绘制一个背景透明的状态栏,然后用StatusBarColor中的颜色去填充,上面一步已经设置了StatusBarColor的颜色 getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); // 2. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN: 视图延伸至状态栏区域,状态栏上浮于视图之上 View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR: 设置状态栏上字体颜色和图标颜色为浅黑色的 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); // 最后还要清除这个标记 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
更多相关文章
- Android(安卓)自定义控件
- Android学习笔记7&s3c2440学习系列8
- Android(安卓)7.0 Audio :通话中的音频调用接口
- Android实用小技巧(持续更新)
- eclipse 中设置android emulator 选项
- Android(安卓)TextView当中设置超链接、颜色、字体
- 无法在Android(安卓)Studio中设置断点
- Android(安卓)ApiDemos示例解析(80):Graphics->Sweep
- android Application Component研究之Activity(一)