有什么方法可以确保导航抽屉位于碎片内容的顶部吗?导航抽屉 - 禁用点击抽屉后面的物品
我用虚拟数据创建了一个小测试应用程序。 10个带有相应编号按钮和textview的片段。问题在于片段元素似乎比导航抽屉具有更高的优先级。
正如所看到的截图,有一次我尝试打开了“0片段”它,而不是选择只登记在导航抽屉后面的按钮点击。按任何其他内容项目都可以正常工作,但只要在其下面没有其他可交互项目,就可以。我可以做些什么来让导航抽屉正确地保持在它背后的内容之上?
有什么方法可以确保导航抽屉位于碎片内容的顶部吗?导航抽屉 - 禁用点击抽屉后面的物品
我用虚拟数据创建了一个小测试应用程序。 10个带有相应编号按钮和textview的片段。问题在于片段元素似乎比导航抽屉具有更高的优先级。
正如所看到的截图,有一次我尝试打开了“0片段”它,而不是选择只登记在导航抽屉后面的按钮点击。按任何其他内容项目都可以正常工作,但只要在其下面没有其他可交互项目,就可以。我可以做些什么来让导航抽屉正确地保持在它背后的内容之上?
嗯,我发现这个问题的一个解决方案。当抽屉打开时,您可以通过在您使用的布局上调用bringToFront()方法将导航栏放在前面。这可确保导航抽屉一直处于任何基础内容之上,直到选择了新项目为止。
即:
@Override
public void onDrawerOpened(View drawerView)
{
activity.getActionBar().setTitle("Select content");
activity.invalidateOptionsMenu();
drawerLayout.bringToFront();
}
android:clickable =“true”对抽屉布局是足够的 – moondroid
它为我工作 – silverFoxA
上滑动面板布局设置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;
}
});
最好的解决方案,接受并没有为我工作。 – peresisUser
我解决了它以不同的方式。
这里是我设置的抽屉代码:
/**
* 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);
}
就是这样
你有没有尝试设置actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); ? – Hruskozrout