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 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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With