Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Appcompat Toolbar Not Showing With Navigation Drawer

Tags:

I am trying to configure the following in my app:

  • Toolbar (Appcompat v7 version)
  • Navigation Drawer
  • Pre-Lollipop Appcompat v7 Material theme

I followed the instructions here: http://android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

However, after declaring .NoActionBar in the theme, as well as putting the toolbar in the layout, my toolbar does not show. What I end up getting is exactly what you'd expect when declaring no action bar -- no action bar. Here is the 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/drawer_layout"     android:layout_width="match_parent"     android:layout_height="match_parent"     android:orientation="vertical"     tools:context=".MainActivity">  <!-- Toolbar --> <include layout="@layout/toolbar"/>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/layout_main"     android:layout_width="match_parent"     android:layout_height="fill_parent"     android:orientation="vertical">      <Spinner         android:id="@+id/spinner_main"         android:visibility="gone"         android:textAlignment="center"         android:gravity="center"         android:layout_gravity="center_horizontal"         android:entries="@array/error_loading_content_array"         android:layout_width="fill_parent"         android:layout_height="wrap_content"/>      <FrameLayout         android:id="@+id/container"         android:layout_weight="1"         android:layout_width="match_parent"         android:layout_height="0px"></FrameLayout>  </LinearLayout>  <fragment     android:id="@+id/navigation_drawer"     android:layout_width="@dimen/navigation_drawer_width"     android:layout_height="match_parent"     android:layout_gravity="start"     android:name=".NavigationDrawerFragment"     tools:layout="@layout/fragment_navigation_drawer"/> 

Toolbar.xml:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary" android:layout_width="fill_parent" android:layout_height="wrap_content"/> 

In MainActivity.java:

// Load view/layout setContentView(R.layout.guidelib_activity_main);  // TODO: Toolbar not showing mToolbar = (Toolbar)findViewById(R.id.toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); 

Solution

<LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/linearlayout_root_main"     android:layout_width="match_parent"     android:layout_height="match_parent">      <android.support.v4.widget.DrawerLayout         xmlns:android="http://schemas.android.com/apk/res/android"         xmlns:tools="http://schemas.android.com/tools"         android:id="@+id/drawer_layout"         android:layout_width="match_parent"         android:layout_height="match_parent"         tools:context=".MainActivity">          <LinearLayout             android:id="@+id/layout_main"             android:layout_width="match_parent"             android:layout_height="match_parent"             android:orientation="vertical">              <!-- Toolbar -->             <!-- Moved up to new LinearLayout root tag -->             <!--<include layout="@layout/toolbar"/>-->             ...  
like image 675
user1234 Avatar asked Oct 26 '14 03:10

user1234


1 Answers

DrawerLayout extends FrameLayout, but you are treating it like a LinearLayout. You can either wrap your tag and the following LinearLayout in another LinearLayout, or you can move your tag.

Also, "fill_parent" is deprecated and maps to "match_parent" so you should just use the latter. You can also remove the additional xmlns attributes in your LinearLayout element.

<android.support.v4.widget.DrawerLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.com/tools"     android:id="@+id/drawer_layout"     android:layout_width="match_parent"     android:layout_height="match_parent"     tools:context=".MainActivity">      <LinearLayout         android:id="@+id/layout_main"         android:layout_width="match_parent"         android:layout_height="match_parent"         android:orientation="vertical">              <!-- Toolbar -->             <include layout="@layout/toolbar"/>             ... 

Your original layout did not work because the Toolbar was hidden (z-ordered) behind the LinearLayout.

like image 91
alanv Avatar answered Oct 20 '22 12:10

alanv