Android: Navigation-Drawer on all activities

前端 未结 3 1247
醉酒成梦
醉酒成梦 2020-12-01 15:12

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 {

         


        
3条回答
  •  囚心锁ツ
    2020-12-01 16:01

    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 :)

提交回复
热议问题