如何使DrawerLayout显示在工具栏下方?

如何使抽屉布局在操作栏/工具栏下方? 我正在使用新的ToolBar视图使用v7:21应用程序compat库。

我看到的例子看起来像

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/my_drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- drawer view --> <LinearLayout android:layout_width="304dp" android:layout_height="match_parent" android:layout_gravity="left|start"> <!-- drawer content --> </LinearLayout> <!-- normal content view --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- The toolbar --> <android.support.v7.widget.Toolbar android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" /> <!-- The rest of content view --> </LinearLayout> 

但是,然后工具栏将被抽屉隐藏,这使得一个animation汉堡包图标(如v7.ActionBarDrawerToggle)无用,因为它不会在抽屉下面可见,但我确实想使用新的工具栏视图来更好地支持Material主题。

那么如何实现呢? 是否可以将DrawerLayout作为非顶级视图?

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- The toolbar --> <android.support.v7.widget.Toolbar android:id="@+id/my_awesome_toolbar" android:layout_height="wrap_content" android:layout_width="match_parent" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" /> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/my_drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- drawer view --> <LinearLayout android:layout_width="304dp" android:layout_height="match_parent" android:layout_gravity="left|start"> <!-- drawer content --> </LinearLayout> <!-- normal content view --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- The rest of content view --> </LinearLayout> </android.support.v4.widget.DrawerLayout> </LinearLayout> 

我不认为你可以使用自定义 toolbar

但是解决办法是将top_margin设置为抽屉。 (谷歌Play商店同样的事情!)

 <!-- drawer view --> <LinearLayout android:layout_marginTop="?attr/actionBarSize" ... 

如果你find一个更好的解决办法告诉我;)

更改您的抽屉布局样式,如下所示

 RelativeLayout ----Toolbar ----DrawerLayout ---ContentView ---DrawerList 

我的解决scheme:使用Android Studio 2.1.2生成模板,抽屉模板:

只需要进行三项更改:在view.xml中设置页边距,并在style.xml中删除overloap状态栏

 <item name="android:windowDrawsSystemBarBackgrounds">false</item> android:fitsSystemWindows="false" 

layout main.xml set margin top获取大小actionbar值android:layout_marginTop="?attr/actionBarSize"

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="false" tools:openDrawer="start"> <include layout="@layout/app_bar_main" android:layout_width="match_parent" android:layout_height="match_parent" /> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:layout_marginTop="?attr/actionBarSize" android:fitsSystemWindows="false" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> </android.support.v4.widget.DrawerLayout> 

我有问题得到这个工作,并最终正确显示。 这是我使用的布局:

 <LinearLayout...[add your namespaces, etc] android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:fitsSystemWindows="true"> <android.support.v7.widget.Toolbar [your custom toolbar] /> <android.support.v4.widget.DrawerLayout [your drawer layout] /> <LinearLayout> [content here] </LinearLayout> <android.support.design.widget.NavigationView /> </LinearLayout> 

小心移动devise小部件,如果有错误的根标签,你会得到一个

“no layout_gravity_left

例外。