抽屉不覆盖动作栏

时间:2016-01-28 09:57:43

标签: android android-layout material-design drawerlayout

我想打开抽屉,使其覆盖动作栏。我尝试使用父线性布局,在里面我定义了工具栏和drawerLayout,工作正常,但事情是我看不到那里的菜单项..这是我只能通过在屏幕上从左向右滑动打开抽屉。如果我在线性布局之外定义工具栏而不是菜单显示但操作栏没有被抽屉覆盖。如何同时实现这两个目标? 这是我的Activity_main

的xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/white"
android:fitsSystemWindows="true"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="variofitness.com.schedulekeeper.HomeActivity">
<include
    android:id="@+id/toolbar_actionbar"
    layout="@layout/toolbar_default"
    android:layout_marginTop="10dp"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:clickable="true" />

    <fragment
        android:id="@+id/fragment_drawer"
               android:name="variofitness.com.schedulekeeper.Fragments.NavigationDrawerFragment"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:layout="@layout/fragment_navigation_drawer" />
</android.support.v4.widget.DrawerLayout>

3 个答案:

答案 0 :(得分:4)

尝试这样做会有所帮助

<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">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:id="@+id/container_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <include
                android:id="@+id/toolbar"
                layout="@layout/toolbar" />
        </LinearLayout>

        <FrameLayout
            android:id="@+id/container_body"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />


    </LinearLayout>


    <fragment
        android:id="@+id/fragment_navigation_drawer"
        android:name="info.androidhive.materialdesign.activity.FragmentDrawer"
        android:layout_width="@dimen/nav_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        app:layout="@layout/fragment_navigation_drawer"
        tools:layout="@layout/fragment_navigation_drawer" />

</android.support.v4.widget.DrawerLayout>

答案 1 :(得分:1)

Please modify your Xml:Put your action bar  inside the drawer or use drawer as parent layout: 
                                        另一个示例代码:     
<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_all_courses_drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    >


    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/parent_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.activlearn.ui.AllCoursesActivity">


        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:theme="@style/AppTheme.AppBarOverlay">

            <include layout="@layout/home_tool_bar" />


        </android.support.design.widget.AppBarLayout>

        <include layout="@layout/content_all_courses" />

    </android.support.design.widget.CoordinatorLayout>


    <fragment
        android:name="com.activlearn.fragments.DrawerFragment"
        class="com.activlearn.fragments.DrawerFragment"
        android:layout_width="@dimen/drawer_width"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        tools:layout="@layout/fragment_drawer" />
</android.support.v4.widget.DrawerLayout>

答案 2 :(得分:1)

如果您的布局结构正确,这应该可以正常工作。根据{{​​3}}:

  

要添加导航抽屉,请使用DrawerLayout对象声明用户界面作为布局的根视图。在DrawerLayout内,添加一个包含屏幕主要内容的视图(隐藏抽屉时的主要布局)和另一个包含导航抽屉内容的视图。

所以你的DrawerLayout应该是根并且有两个直接的孩子。您有三个要包含的元素,因此您需要将工具栏和内容容器组合在一起。在伪代码中,结构如下所示:

<DrawerLayout>

    <LinearLayout> (or other type of layout)
        <Toolbar/>
        <content container/>
    </LinearLayout>

    <Navigation Drawer/>

</DrawerLayout>