Android在单个活动中有一个导航抽屉和工具栏

时间:2015-12-30 01:04:26

标签: android android-layout navigation-drawer android-coordinatorlayout

我正在开发一个需要ActionBar标签和导航抽屉的应用。然而,似乎这两者在布局上相互冲突。对于导航抽屉,我需要有DrawerLayout作为根布局,然后是抽屉和内容的另外两个视图。这真的很容易,而且效果很好。这样做的代码是:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/navdrawer"
    tools:context="io.github.ncca_fbla.fabric.MainActivity">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

    <LinearLayout
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start">
    </LinearLayout>

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

我可以告诉它无需运行或任何其他工作即可工作:

问题是我需要TabLayoutViewPager和自定义ToolBar,所有这些都需要CoordinatorLayout作为根元素才能正常工作。无论如何,我可以得到我需要正常工作的三个视图,保持DrawerLayout为根?我尝试在没有CoordinatorLayout作为根视图的情况下添加它们,并且工具栏无法正确显示。基本上,我试图将上面的代码与以下内容结合起来:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/coord"
    tools:context="io.github.ncca_fbla.fabric.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Toolbar
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="fixed"
            app:tabGravity="fill"/>
    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"  />


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

1 个答案:

答案 0 :(得分:1)

您可以通过将协调器布局存储在名为coordinator_tabs的单独文件中并将其包含在DrawerLayout中来干净地完成。您的文件将如下所示:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/navdrawer"
    tools:context="io.github.ncca_fbla.fabric.MainActivity">

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <LinearLayout
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start">
    </LinearLayout>

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

如果您使用的是Android Studio,可以通过右键单击java文件夹并选择New-&gt; Activity-&gt; Navigation Drawer Activity

来查看此示例。