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

use*_*971 47 android toolbar android-support-library navigation-drawer drawerlayout

如何使抽屉布局位于操作栏/工具栏下方?我正在使用v7:21 app compat库和新的ToolBar视图.

我看到的例子看起来像

<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>  
Run Code Online (Sandbox Code Playgroud)

但随后工具栏将被抽屉隐藏,这使得动画汉堡图标(如v7.ActionBarDrawerToggle)无用,因为它在抽屉下方不可见,但我确实想使用新的ToolBar视图来更好地支持Material主题.

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

小智 95

<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>  
Run Code Online (Sandbox Code Playgroud)

  • 我也觉得奇怪的是,他们会创建一个漂亮的箭头旋转动画,更改标题并更新菜单,这样它就可以被抽屉覆盖......希望他们能解释它背后的逻辑而不是喂食我们的指导方针...... (7认同)
  • 欢迎来到SO!请在答案中添加一些解释. (4认同)
  • 值得注意的是,根据材料设计清单Google今天发布的http://android-developers.blogspot.com/2014/10/material-design-on-android-checklist.html:"签名元素:如果应用程序使用导航抽屉,它遵循较新的材料设计互动和造型(图7).抽屉出现在应用栏的前面.它在状态栏后面也显示为半透明." (3认同)
  • 这对我来说,一旦实施就显得如此明显.工具栏需要在抽屉布局上而不是在内部,但是Android开发者上的抽屉示例在根处具有抽屉,因为默认情况下操作栏将位于顶部. (2认同)
  • 由于在按下汉堡图标打开抽屉后产生的动画,清单中的那个项目没有多大意义. (2认同)

EC8*_*4B4 22

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

但是解决方法是设置top_margin抽屉.(谷歌游戏商店也一样!)

<!-- drawer view -->
<LinearLayout
    android:layout_marginTop="?attr/actionBarSize"
...
Run Code Online (Sandbox Code Playgroud)

如果你找到了更好的解决方案,请告诉我;)

  • 一个似乎有效的解决方案是使用LinearLayout作为布局重新排序布局,使用ToolBar和DrawerLayout作为子项. (3认同)