Navigation drawer - Disable click through on items behind the drawer

前端 未结 6 2150
旧时难觅i
旧时难觅i 2021-02-06 20:34

Is there any way to make sure that the navigation drawer stays on top of the content in the fragment?

I created a small test application with dummy data. 10 fragments w

6条回答
  •  别那么骄傲
    2021-02-06 20:55

    I solved it in a different way.

    Here is my code for setting up the Drawer:

    /**
     * Setup Navigation Drawer
     */
    private void setDrawer() {
        NavigationDrawerFragment mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer);
        mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
    }
    

    the setup method is inside my NavigationDrawerFragment, here is my code for it:

    /**
     * Users of this fragment must call this method to set up the navigation drawer interactions.
     *
     * @param fragmentId   The android:id of this fragment in its activity's layout.
     * @param drawerLayout The DrawerLayout containing this fragment's UI.
     * @param toolbar      The Toolbar of the activity.
     */
    public void setup(int fragmentId, DrawerLayout drawerLayout, Toolbar toolbar) {
        View mFragmentContainerView = (View) getActivity().findViewById(fragmentId).getParent();
        DrawerLayout mDrawerLayout = drawerLayout;
    
        //noinspection deprecation
        mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.colorPrimaryDark));
    
        ActionBarDrawerToggle mActionBarDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, "Drawer opened", "Drawer closed") {
            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                if (!isAdded()) return;
    
                // Solution:
                // Disable click event on views below Navigation Drawer
                mFragmentContainerView.setClickable(false);
                getActivity().invalidateOptionsMenu();
            }
    
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                if (!isAdded()) return;
    
                // Solution:
                // Enable click event on views below Navigation Drawer
                mFragmentContainerView.setClickable(true);
                getActivity().invalidateOptionsMenu();
            }
        };
    
        // Defer code dependent on restoration of previous instance state.
        mDrawerLayout.post(new Runnable() {
            @Override
            public void run() {
                mActionBarDrawerToggle.syncState();
            }
        });
    
        //noinspection deprecation
        mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);
    }
    

    That's it

提交回复
热议问题