I want to add navigation drawer on all actvities of my Android project. This is the code of the MainActivity:
public class MainActivity extends Activity {
Okay Guys will share my way I do it (in case you are developing project after somebody and there is already tons of activities).
Finally I inflate navigation drawer with one line of code (in onCreate):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this; //context
//setContentView(R.layout.activity_favorites); // Was so
Utils.inflatedNavigationDrawerView(mContext, R.layout.activity_favorites); // Now is
//...
}
next what is Utils? :
public class Utils{
public static void inflatedNavigationDrawerView(Context context, int layoutId){
// Here get view of clear DrawerLayout
final View drawerLayout = View.inflate(context,R.layout.navigation_drawer_inflator, null);
// Next inflate to it passed layout for activity
final View mainLayout = View.inflate(context,layoutId, (ViewGroup) drawerLayout);
// And finally inflate to it fragment for NavigationDraver
final View fragmentLayout = View.inflate(context,R.layout.navigation_drawer_inflator_fragment, (ViewGroup) drawerLayout);
// Next we should try to get our drawer (should check with casting to each activity you want to insert to)
NavigationDrawerFragment drawerFragment = null;
// this block should be repeated for each activity you want to use in.
if (context instanceof FavoritesActivity){
// Set our pack of inflates to contentview
((FavoritesActivity) context).setContentView(mainLayout);
// And now we get NavigationDrawerFragment
drawerFragment = (NavigationDrawerFragment)
((FavoritesActivity) context).getSupportFragmentManager().findFragmentById(R.id.navigation_drawer_fragment);
}
if(drawerFragment != null){ // if null then we missed some castings for activity used in.
// Finally setup our drawer
drawerFragment.setUpEasy(R.id.navigation_drawer_fragment, (DrawerLayout)drawerLayout.findViewById(R.id.drawer_layout), (Toolbar) mainLayout.findViewById(R.id.app_bar));
}
}
}
If you would like to avoid creation of hamburger in Toolbar then you shoud in setUpEasy place: mDrawerToggle.setDrawerIndicatorEnabled(false);
Here is my sample of setup:
public void setUpEasy(int fragmentId, DrawerLayout drawerLayout, Toolbar toolBar) {
mContainerView = getActivity().findViewById(fragmentId);
mDrawerLayout = drawerLayout;
mDrawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout, toolBar, R.string.open, R.string.close){
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
if(!mUserLearnedDrawer){
mUserLearnedDrawer = true;
saveToPreferences(getActivity(), Constants.PREFERENCES_LEARNDRAWER_KEY, mUserLearnedDrawer+"");
}
}
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
}
};
mDrawerToggle.setDrawerIndicatorEnabled(false); // If false then no hamburger menu.
mDrawerLayout.setDrawerListener(mDrawerToggle);
mDrawerLayout.post(new Runnable() {
@Override
public void run() {
mDrawerToggle.syncState();
}
});
}
and views used:
// navigation_drawer_inflator.xml
// navigation_drawer_inflator_fragment.xml
Finally if you will implement this - You will be able to insert navigation drawer to any activity on run. Cheers :)