This post help us to get navigation
drawer icon without android drawer layout in the Action Bar.
Enable
action bar icon to support navigation drawer toggle.
//
Set whether home should be displayed as an "up" affordance.
//
Set this to true if selecting "home" returns up by a single
level in your UI rather than back to the top level or front page.
getActionBar().setDisplayHomeAsUpEnabled(true);
//Enable
or disable the "home" button in the corner of the action
bar.
getActionBar().setHomeButtonEnabled(true);
We should be aware of
navigation
drawer before starting, navigation drawer helps user to bring the
navigation drawer onto the screen by swiping from the left edge of
the screen or by touching the application icon on the action bar.
On Tap of application
icon, Navigation drawer opens by using DrawerLayout listeners, where
ActionBarDrawerToggle supports us from toggling the drawer.
This class provides a
handy way to tie together the functionality of DrawerLayout and the
framework ActionBar to implement the recommended design for
navigation drawers.
ActionBarDrawerToggle(Activity
activity, DrawerLayout drawerLayout, int drawerImageRes, int
openDrawerContentDescRes, int closeDrawerContentDescRes)
Construct a new
ActionBarDrawerToggle.
The
given
Activity
will
be linked to the specified DrawerLayout
.
The provided drawer indicator drawable will animate slightly
off-screen as the drawer is opened, indicating that in the open state
the drawer will move off-screen when pressed and in the closed state
the drawer will move on-screen when pressed.
String resources must be provided to
describe the open/close drawer actions for accessibility services.
Parameters
activity | The Activity hosting the drawer |
drawerLayout | The DrawerLayout to link to the given Activity's ActionBar |
drawerImageRes | A Drawable resource to use as the drawer indicator |
openDrawerContentDescRes | A String resource to describe the "open drawer" action for accessibility |
closeDrawerContentDescRes | A String resource to describe the "close drawer" action for accessibility |
The third parameter is the drawable
which we are seeing beside the action bar icon.
Now the question, How can we update
the navigation drawer icon without DrawerLayout?
Just
call updateNavigationDrawerIcon method after
enabling the action bar methods.
public
void
updateNavigationDrawerIcon(Drawable drawable) {
Method
setHomeAsUpIndicator;
try
{
setHomeAsUpIndicator
= ActionBar.class.getDeclaredMethod("setHomeAsUpIndicator",
Drawable.class);
setHomeAsUpIndicator.invoke(getActionBar(),
drawable);
}
catch
(NoSuchMethodException e) {
Log.e("CHECK",
"No Such Method");
View
home = findViewById(android.R.id.home);
ViewGroup
parent = (ViewGroup) home.getParent();
int
childCount = parent.getChildCount();
if
(childCount == 2) {
final
View first = parent.getChildAt(0);
final
View second = parent.getChildAt(1);
final
View up = first.getId() == android.R.id.home
? second : first;
((ImageView)
up).setImageDrawable(drawable);
}
}
catch
(Exception e) {
e.printStackTrace();
}
}
On
click of app icon, we will be invoking onOptionsItemSelected method.
@Override
public
boolean
onOptionsItemSelected(MenuItem item) {
switch
(item.getItemId()) {
case
android.R.id.home:
Log.d("CHECK",
"Navigation Icon is selected");
//
Use for slide from left to right
slide_me.toggleLeftDrawer();
break;
}
return
super.onOptionsItemSelected(item);
}
Output:
Source Code
You can download the
source code by Source Code Click Here. This project is built using
eclipse IDE. Unzip and import the project into Eclipse, it’s a good idea to use
the Project by clean and rebuild from the project menu. It works in all API
levels above 14.
Thanks for reading :)
Whether this post is helpful?
Have something to add to this post? If you have any other quick thoughts/hints that you think people will find useful? Share it in the comments.