2014-10-20 71 views
36

在Android 4.4 KitKat上,您可以将状态和导航栏设置为透明,android:windowTranslucentStatusandroid:windowTranslucentNavigation主题元素,然后在应用程序窗口的下方条形框中添加渐变。然而,在Android 5.0 Lollipop中,这已经改变了,现在不是渐变,而是添加了纯色透明色。是Android 5.0提供了在新材料主题的新android:statusBarColorandroid:navigationBarColor元素,但是当你尝试将这些元素设置为@android:color/transparent没有扩展应用程序窗口,如果您使用android:windowTranslucentStatusandroid:windowTranslucentNavigation然后android:statusBarColorandroid:navigationBarColor被忽略。Android 4.4半透明Android 5.0上的状态和导航栏样式

我错过http://developer.android.com/training/material/theme.html#StatusBar上描述的内容吗?

enter image description here

回答

63

设置android:windowTranslucentStatus并设置android:statusBarColor@android:color/transparent

然后添加代码如下:

getWindow().getDecorView().setSystemUiVisibility(
     View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); 

如果您还想要导航栏是半透明的,设置android:navigationBarColor@android:color/transparent并结合标志View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION为好。

我没有在导航栏上进行实验,但它会工作。

+1

太棒了!这适用于系统和导航栏。我不明白为什么在官方文档中没有解释这一点。谢谢。 – AxeEffect 2014-10-26 16:43:22

+1

谢谢,它工作完美! – Spotlight 2014-10-30 20:08:27

+1

我不知道为什么,但getWindow()。getDecorView()。setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);使我的代码失败。我必须确保这不是在代码中才能使其工作。 – easycheese 2014-11-15 00:22:30

7

添加下面一行到你的风格:

<item name="android:windowTranslucentStatus">true</item> 
<item name="android:windowTranslucentNavigation">true</item> 
2

为了澄清@suckgamony's answer这个问题:

  • 在棒棒糖及以上,设置android:statusBarColorandroid:navigationBarColor@android:color/transparent将使状态栏导航栏(分别)是完全透明的,除非:
  • android:windowTranslucentStatusandroid:windowTranslucentNavigation被设置为真,在这种情况下状态栏导航(分别)被设定为实心透明颜色@AxeEffect描述(同样,下棒棒糖及以上);
  • android:statusBarColorandroid:navigationBarColor只能与Android版本21(Lollipop 5.0)或更高版本一起使用。如在the referred to answer,android:windowTranslucentStatusandroid:windowTranslucentNavigation中所述,当与Kitkat一起使用时提供透明渐变而不是完全透明。
相关问题