导航抽屉 – 禁止点击抽屉后面的物品

有没有办法确保导航抽屉停留在片段内容的顶部?

我用虚拟数据创build了一个小testing应用程序。 10个片段带有相应的编号button和文本视图。 问题在于片段元素似乎比导航抽屉具有更高的优先级。

在这里输入图像说明

如截图所示,一旦我尝试打开“0片段”,它会select在导航抽屉后面的button上注册点击。 按任何其他内容项目工作正常,但只要没有其他可交互项目在他们之下。 我能做些什么来让导航抽屉正确地保持在它后面的内容之上?

在滑动窗格布局上设置android:clickable="true"标记。

这个问题似乎不是因为点击重点,

访问https://developer.android.com/training/implementing-navigation/nav-drawer.html#DrawerLayout

主要内容视图(上面的FrameLayout)必须是DrawerLayout中的第一个子元素,因为XML顺序意味着z顺序,而且抽屉必须位于内容之上。

在我的片段抽屉中,我设置TouchListener返回True。 它为我工作

  mFragmentContainerView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } }); 

我以不同的方式解决了这个问题。

这里是我设置抽屉的代码:

 /** * 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); } 

setup方法是在我的NavigationDrawerFragment ,这里是我的代码:

 /** * 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); } 

而已

那么,我find了这个问题的一个解决scheme。 当抽屉被打开时,可以通过在您使用的布局上调用bringToFront()方法将导航栏放在前面。 这可以确保导航抽屉在任何基础内容之上,直到select一个新项目。

即:

 @Override public void onDrawerOpened(View drawerView) { activity.getActionBar().setTitle("Select content"); activity.invalidateOptionsMenu(); drawerLayout.bringToFront(); }