Android NavigationView(材料支持库)不能正确地与状态栏交互

我正在从这里的示例来将新的Material Design支持库的NavigationView集成到我的应用程序中。

我的总体布局如下所示:

activity.xml

<android.support.v4.widget.DrawerLayout android:fitsSystemWindows="true"> <!-- main content --> <android.support.design.widget.NavigationView .. /> </android.support.v4.widget.DrawerLayout> 

的themes.xml

 <style name="MyTheme" extends "Theme.AppCompat.Light.NoActionBar"> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> </style> 

MyActivity.java

 onCreate(..) { .. // This color can be different depending on some conditions. DrawerLayout.setStatusBarBackground(color); } 

但是,我不断得到一个灰色的状态栏,并且NavigationView不会在状态栏下绘制。 我觉得灰色的状态栏是因为我没有在主题中定义一个自定义的colorPrimaryDark属性。 不过,我会假设DrawerLayout.setStatusBarBackground将覆盖并设置状态栏的颜色。 我无法在新的NavigationView上find很多文档。 有没有人有任何想法?

在values-v21 / themes.xml中为API 21+添加样式:

 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> </style> </resources> 

在activity.xml中,尝试在NavigationView (除了DrawerLayout )上设置android:fitsSystemWindows="true"

对于每一个挣扎着这个,你的布局文件应该是这样的:

 <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> ... <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/drawer_header" app:menu="@menu/menu_drawer"/> </android.support.v4.widget.DrawerLayout> 

你必须包括

 android:fitsSystemWindows="true" 

在DrawerLayout和NavigationView中。

叹气,我想出了我的问题。 有一些奇怪的抽象,我们用来在右侧添加一个debugging抽屉。 因此,整体视图层次结构实际上看起来像这样

 <DrawerLayout id="debug"> <LinearLayout id="debug_drawer" /> <DrawerLayout id="nav_drawer" fitsSystemWindows="true"> <NavigationView .... /> </DrawerLayout> </DrawerLayout> 

所以我在错误的抽屉上调用了DrawerLayout.setStatusBarColor并在错误的抽屉上设置了fitsSystemWindows 。 结果,窗口从不与状态栏交互:(