对于 android5.0 以上的状态栏沉浸方法,我看到的大部分说法是下面的style
1 2 3 4 5 6 7 8 9 | <style name= "AppTheme" parent= "Theme.AppCompat.Light.NoActionBar" > <!-- Customize your theme here. --> <item name= "colorPrimary" >@color/colorPrimary</item> <item name= "colorPrimaryDark" >@color/colorPrimaryDark</item> <item name= "colorAccent" >@color/colorAccent</item> <item name= "android:windowTranslucentStatus" > false </item> <item name= "android:windowTranslucentNavigation" > true </item> <item name= "android:statusBarColor" >@android:color/transparent</item> </style> |
刚开始我也是这么用的,似乎没有什么问题,但是后来发现在有底部虚拟按键的设备上,我的应用布局会和三个虚拟按键重叠,但是我想要的效果是我的布局在虚拟键之上
于是我去掉了这句话
1 | <item name= "android:windowTranslucentNavigation" > true </item> |
然后我的状态栏却不再沉浸了,不太清除这句话为什么会影响状态栏,看起来好像只会影响底部虚拟键的样子
于是另找解决办法,实现了沉浸状态栏的同时布局位于虚拟键之上
核心代码如下,java代码和item需要同时使用
代码中加上这段代码
1 2 3 4 5 6 7 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) try { Class decorViewClazz = Class.forName( "com.android.internal.policy.DecorView" ); Field field = decorViewClazz.getDeclaredField( "mSemiTransparentStatusBarColor" ); field.setAccessible( true ); field.setInt(getWindow().getDecorView(), Color.TRANSPARENT); //改为透明 } catch (Exception e) { } |
style中加上下面的item
1 | <item name= "android:windowTranslucentStatus" > true </item> |
转自:https://www.cnblogs.com/liupy/p/9448260.html