James Parsons
James Parsons

Reputation: 6057

Android have a navigation drawer and toolbar in a single activity

I am developing an app that will need ActionBar tabs as well as a navigation drawer. It seems, however that these two conflict with each other in layout. For a Navigation Drawer, I need to have a DrawerLayout as the root layout and then two other views for the drawer and content. This is really easy to, and works well. The code to do that is:

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

I can tell it works without even running or dong any other work:

The issue is that I need a TabLayout, ViewPager and a custom ToolBar all of which require a CoordinatorLayout as the root element to work properly. Is there anyway I can get the three views I need to work properly, keeping the DrawerLayout as the root? I have tried just adding them without a CoordinatorLayout as the root view, and the toolbar does not display properly. Basically, I am trying to combine, the above code with something like:

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

Upvotes: 1

Views: 280

Answers (1)

TheoKanning
TheoKanning

Reputation: 1639

You can do it cleanly by storing your coordinator layout in a separate file named coordinator_tabs and including it in the DrawerLayout. Your file would then look like this:

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

If you're using Android Studio, you can see an example of this by right-clicking on a java folder and selecting New->Activity->Navigation Drawer Activity

Upvotes: 1

Related Questions