我也有同样的问题,皮尔。令人恼火的是,尽管这是材料设计指南的一部分,但似乎没有任何像样的指南来说明如何解决这个问题。
不管怎样,这是我怎么做的。。。
样式
我的
styles.xml
包含一个基本主题,然后是我的主应用程序主题。我为使用导航抽屉的活动创建了另一个主题,如下所示:
<style name="Base.AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
<style name="AppTheme" parent="Base.AppTheme">
<item name="colorPrimary">@color/theme_primary</item>
<item name="colorPrimaryDark">@color/theme_primary_dark</item>
<item name="colorAccent">@color/theme_accent</item>
</style>
<style name="AppTheme.NavDrawer">
<item name="android:windowBackground">@color/window_background</item>
</style>
颜色
window_background
正在引用我的
colors.xml
文件,该文件将其列为
#FFF5F5F5
。请注意,以上内容对API 21+的工作方式略有不同,因此在
values-v21
目录,创建另一个
样式.xml
。该文件应包括以下内容:
<style name="AppTheme.NavDrawer">
<item name="android:windowBackground">@color/window_background</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
布局
现在来看布局。在导航抽屉所在的布局文件中,可以包含以下内容。
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" >
<!-- The main content view -->
<RelativeLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/main_adView">
<!-- The app bar -->
<android.support.design.widget.AppBarLayout
android:fitsSystemWindows="true"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<android.support.v7.widget.Toolbar
android:id="@+id/main_toolbar"
style="@style/AppTheme.Toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<!-- Your layout content below -->
<FrameLayout
android:id="@+id/your_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
<!-- Other stuff here if you like -->
</RelativeLayout>
<!-- The navigation drawer -->
<include layout="@layout/navdrawer"
android:id="@+id/main_navigationView" />
显然,您可以删除
RelativeLayout
如果您不需要任何其他视图,因为这将是多余的。我在我的
<include>
标签如下:
<android.support.design.widget.NavigationView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="@dimen/navdrawer_width"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/navdrawer_header"
app:menu="@menu/navdrawer_items" />
使用以上代码,您应该在状态栏后面正确绘制导航抽屉。