大部分人所想或所看的沉浸式菜单栏并不是这么称呼的,真正的沉浸式是类似于游戏全屏菜单栏已经看不到的,
所以这里我把大部分人所想象或看到的称为假沉浸式菜单栏。
本文基于Android4.4(v19)以上所述,想使用自动沉浸式,首先得在配置文件中配置包(这包导入整个应用会多几百K)
compile 'com.android.support:appcompat-v7:23.2.0'
然后在 res 文件下 (当sdk >= 19的时候,系统会自动调用):
1. 新建一个 values-v19 的文件
2. 在 values-v19 下新建一个styles.xml文件
注:如果用AndroidStudio开发的话,直接在原styles文件下写样式会发出错误警告,然后你可以根据提示直接生成这个 v19 文件以及样式了。
<style name="MainTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item> 这两句已经达到沉浸效果
<item name="android:fitsSystemWindows">true</item> 加上这一句,系统自动调整你布局控件在菜单栏一下
</style>
把该样式设置application的属性,之后所有子布局(不设置特定样式前提)会自动调用。
其实所谓沉浸就把布局全屏,然后再显示状态栏而已,所以加上
<item name="android:fitsSystemWindows">true</item>
这句后,布局就会自动把被状态栏遮住的控件自动往下移动,也就是修整布局,
但是这属性只针对当前设置的布局进行修整,
也就是说,如果你是在application设置了这个样式,以后的所有布局(不设置特定样式前提),都是按第一个总布局进行修整
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"
> <LinearLayout android:layout_width="match_parent"android:id="@+id/main_layout" 总布局
android:layout_height="wrap_content" android:orientation="vertical" > </LinearLayout></LinearLayout> 如上所示,也就是总布局的子控件如果被状态栏遮住了,就会自动往下移动,并且状态栏的颜色就是总布局的背景颜色android:id="@+id/child_layout" 二级布局
如果你在二级布局设置了 android:fitsSystemWindows 同理如果二级布局的控件被状态栏遮住了,就会自动往下移动,并且状态栏的颜色就是二级布局的背景颜色
所以很多人想把自定义的actionBar作为沉浸,这时候,你的actionBar的上一级高度就不能写死(除非你写死一个很大的高度值)
,否则只能wrap_content
小编测试到这里的时候,才发现Android控制有一个很不友好的地方,就是给控件或布局(高度wrap_content)设置图片为背景的时候,
如果图片过大,就是把控件拉大了,很不美观,但是把背景设置一个颜色值,就很好的填充控件或者布局,但是很多情况下都想用图片
做背景,并且沉浸,所以没想到什么好的办法解决,如有想到好的解决这沉浸不写死actionBar上一级高度的办法,请留言
有人会想,直接用一级布局的背景作为状态栏的背景不是也很好吗,下面的控件又填充其他颜色覆盖就可以了,这是个办法,
但是如果有关注GPU渲染的,都不想这么做,毕竟这样又多了一层渲染。
文章描述得不是很好(敬请原谅),以上所述均为小编个人测试所得结果,如有错漏,请指出,多谢!!!