Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Clicking hamburger icon on Toolbar does not open Navigation Drawer

I have a simple android.support.v7.widget.Toolbar and all I am trying to do is to open a NavigationDrawer by pressing the "hamburger" icon in the top left corner. The "hamburger" button is visible, and when I start to pull from the left I see the animation on the button but pressing the button does not open/close the NavigationDrawer as I expect. I have followed the [Google Documentation][1] and still am not able to figure this out. Sorry for any confusion, below is the simplified code I am currently attempting to use:

public class MainActivity extends AppCompatActivity implements     View.OnClickListener,     GoogleApiClient.ConnectionCallbacks,     GoogleApiClient.OnConnectionFailedListener {    @Override protected void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);       setContentView(R.layout.activity_main);       Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar);     setSupportActionBar(toolbar);     getSupportActionBar().setDisplayHomeAsUpEnabled(true);        toolbar.setNavigationOnClickListener(new View.OnClickListener() {         @Override         public void onClick(View v) {             Log.d("NICK", "button button button..................");         }     });          mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);         NavigationView n = (NavigationView) findViewById(R.id.nav);         mDrawerLayout.setOnClickListener(new View.OnClickListener(){             @Override             public void onClick(View v) {                 Log.d("NICK", "button button button..................");             }         });          //mDrawerLayout.setDrawerListener(mDrawerToggle);         n.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {             @Override             public boolean onNavigationItemSelected(MenuItem menuItem) {                 switch (menuItem.getItemId()) {                     ////.......                  }                 mDrawerLayout.closeDrawers();  // CLOSE DRAWER                 return true;             }         });  @Override public boolean onOptionsItemSelected(MenuItem item) {      Log.d("NICK","CWECNEWKVNERIPNVIEWNFVIPEWNVIPEWNVPIEWNVPIEWNVPIEWNVPIRWNVPRWVPO");     switch (item.getItemId()) {         case android.R.id.home:             mDrawerLayout.openDrawer(GravityCompat.START);  // OPEN DRAWER             Log.d("NICK","CWECNEWKVNERIPNVIEWNFVIPEWNVIPEWNVPIEWNVPIEWNVPIEWNVPIRWNVPRWVPO");             return true;      }            return super.onOptionsItemSelected(item);   }  @Override public void onConfigurationChanged(Configuration newConfig) {     super.onConfigurationChanged(newConfig);     mDrawerToggle.onConfigurationChanged(newConfig); }    @Override public boolean onCreateOptionsMenu(Menu menu) {     getMenuInflater().inflate(R.menu.drawer, menu);     return true; }   } 

}

And as it is I do not get any of the log debug statements when running.

This is essentially the issue I have: https://stackoverflow.com/a/26636045/1489990. I've followed this and it just doesn't work.

It is my understanding that setNavigationOnClickListener is called when the hamburger icon is pressed, and this is where I am focusing my efforts is to get the event handled properly because when I press the button I do not get my log statement. Let me know if this idea is incorrect. https://developer.android.com/reference/android/widget/Toolbar.html#setNavigationOnClickListener(android.view.View.OnClickListener)

My Layouts:

ActivityMain.xml

<RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"     android:layout_width="fill_parent"     android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/d" android:background="@drawable/home_wall">     <android.support.v7.widget.Toolbar     android:id="@+id/my_toolbar"     android:layout_height="wrap_content"     android:layout_width="match_parent"     android:minHeight="?attr/actionBarSize"     android:background="?attr/colorPrimary"     android:layout_marginBottom="10dp"     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"     android:layout_marginTop="25dp"      xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto" />    <android.support.v4.widget.DrawerLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     android:layout_width="match_parent"     android:id="@+id/drawer"      android:layout_height="match_parent"     android:fitsSystemWindows="true">        <ImageView         android:layout_width="fill_parent"         android:layout_height="200dp"         android:id="@+id/imageView"         android:src="@drawable/trans2"         android:layout_alignParentTop="true"         android:layout_marginTop="10dp"         android:layout_marginLeft="5dp"         android:layout_marginRight="5dp"         android:paddingBottom="300dp" />      <RelativeLayout         android:orientation="vertical"         android:layout_width="fill_parent"         android:layout_height="fill_parent"         android:id="@+id/d8"         android:layout_alignParentTop="true"         android:layout_alignLeft="@+id/imageView"         android:layout_alignStart="@+id/imageView"         android:paddingTop="0dp">          <Button             android:layout_width="75dp"             android:layout_height="50dp"             android:text="Gallery"             android:id="@+id/save_button"             android:background="#dd2c00" android:textColor="#fff"             android:layout_below="@+id/Purchases"             android:layout_toRightOf="@+id/start_button"             android:layout_toEndOf="@+id/start_button" />         <Button             android:layout_width="125dp"             android:layout_height="50dp"             android:text="Store"             android:id="@+id/Purchases"             android:background="#ff6e40" android:textColor="#fff"             android:layout_above="@+id/instructions_button6"             android:layout_toLeftOf="@+id/start_button"             android:layout_toStartOf="@+id/start_button"             android:layout_marginBottom="98dp" />         <Button             android:layout_width="75dp"             android:layout_height="50dp"             android:text="Help"             android:id="@+id/instructions_button6"             android:background="#dd2c00" android:textColor="#fff"             android:layout_alignParentBottom="true"             android:layout_toLeftOf="@+id/start_button"             android:layout_toStartOf="@+id/start_button"             android:layout_marginLeft="5dp"             android:layout_marginBottom="10dp" />         <Button             android:layout_width="75dp"             android:layout_height="300dp"             android:text="Start"             android:id="@+id/start_button"             android:background="#ff3d00"             android:textColor="#fff"             android:layout_alignParentBottom="true"             android:layout_centerHorizontal="true"             android:layout_marginBottom="10dp" />         <Button             android:layout_width="125dp"             android:layout_height="50dp"             android:text="Achievements"             android:id="@+id/Scores"             android:background="#ff6e40" android:textColor="#fff"             android:layout_alignTop="@+id/Purchases"             android:layout_toRightOf="@+id/start_button"             android:layout_toEndOf="@+id/start_button" />         <TextView             android:layout_width="wrap_content"             android:layout_height="wrap_content"             android:text="Welcome to the quiz!"             android:id="@+id/textView"             android:textColor="#fff"             android:textSize="20dp"             android:layout_alignParentTop="true"             android:layout_centerHorizontal="true"             android:layout_marginTop="70dp" />           <!-- sign-in button -->         <com.google.android.gms.common.SignInButton             android:id="@+id/sign_in_button"             android:layout_width="110dp"             android:layout_height="50dp"             android:layout_above="@+id/start_button"             android:layout_centerHorizontal="true"             android:visibility="visible" />          <!-- sign-out button -->         <Button             android:id="@+id/sign_out_button"             android:layout_width="125dp"             android:layout_height="wrap_content"             android:text="Sign Out"             android:visibility="invisible"             android:background="#dd4b39"             android:textColor="#fff"             android:layout_alignTop="@+id/sign_in_button"             android:layout_centerHorizontal="true"             android:layout_marginTop="160dp" />      </RelativeLayout>      <android.support.design.widget.NavigationView         android:layout_width="wrap_content"         android:layout_height="match_parent"         android:layout_gravity="start"         android:background="#fff"         android:id="@+id/nav"          app:headerLayout="@layout/drawer_header"         app:menu="@menu/drawer"/> </android.support.v4.widget.DrawerLayout> 

Drawer.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_menu" xmlns:app="http://schemas.android.com/apk/res-auto">  <item android:title="Google Play Games"      android:icon="@drawable/ic_local_airport_white_48dp">     <menu>         <item             android:id="@+id/Sign_in_drawer"              android:icon="@drawable/games_controller_grey"             android:title="Sign in" />         <item             android:id="@+id/ach"             android:icon="@drawable/games_achievements"             android:title="Achievements" />     </menu> </item>  <item android:title="Start a Quiz"     android:icon="@drawable/ic_local_airport_white_48dp">     <menu>         <item             android:id="@+id/quizStart25"              android:icon="@drawable/ic_local_airport_white_48dp"             android:title="25 Questions" />         <item             android:id="@+id/quizStart10"             android:icon="@drawable/ic_local_airport_white_48dp"             android:title="10 Questions" />     </menu> </item>  <group     android:checkableBehavior="single">     <item         android:id="@+id/gallery"          android:icon="@drawable/ic_photo_library_white_48dp"         android:title="Gallery" />     <item         android:id="@+id/stats"         android:icon="@drawable/ic_toc_white_48dp"         android:title="Statistics" />     <item         android:id="@+id/store"         android:icon="@drawable/ic_shop_white_48dp"         android:title="Store" />     <item         android:id="@+id/settings"         android:icon="@drawable/ic_settings_white_48dp"         android:title="Settings" />     <item         android:id="@+id/about"         android:icon="@drawable/ic_info_white_48dp"         android:title="About" />  </group>  <item android:title="Support">     <menu>         <item             android:id="@+id/help_drawer"             android:icon="@drawable/ic_help_white_48dp"             android:title="Help" />         <item             android:id="@+id/report"             android:icon="@drawable/ic_report_problem_white_48dp"             android:title="Contact Developer" />         <item             android:id="@+id/GPlusCommunity"             android:icon="@drawable/btn_g_white_normal"             android:title="Google+ Community" />      </menu> </item> 

like image 991
ez4nick Avatar asked Jun 13 '15 22:06

ez4nick


People also ask

Where is the hamburger menu on Android?

Like iOS's legacy back buttons, these hamburger menu buttons appear in the top left corners of their apps, but considering you don't need to use them very often, I'm not so worried about how easy they are to reach.

How do I get navigation drawer in all activity?

The user can view the navigation drawer when they swipe the activity's screen from the left edge of the android device. A user can also find it from the activity, by tapping the app icon (also known as the “hamburger” menu) in the action bar.


1 Answers

In your ActivityMain.xml, the toolbar is outside of the DrawerLayout. That's the problem. If you want Toolbar to interact with DrawLayout, Toolbar needs to be a child of DrawerLayout.

To fix the problem, make DrawerLayout the root of your activity. Here's the documentation. The relevant quote is:

To add a navigation drawer, declare your user interface with a DrawerLayout object as the root view of your layout. Inside the DrawerLayout, add one view that contains the main content for the screen (your primary layout when the drawer is hidden) and another view that contains the contents of the navigation drawer.

So basically, structure your ActivityMain.xml to be something like this:

<android.support.v4.widget.DrawerLayout ...>      <RelativeLayout ...>          <android.support.v7.widget.Toolbar .../>          <!-- Your other content goes here -->      </RelativeLayout>      <android.support.design.widget.NavigationView .../>  </android.support.v4.widget.DrawerLayout> 

That should take care of the problem.

like image 97
hungryghost Avatar answered Sep 18 '22 15:09

hungryghost