所以当抽屉导航开始打开时,我想隐藏标签。我的代码在完成打开时将它们隐藏起来,但这不是我想要的。
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
R.drawable.ic_drawer,
R.string.drawer_open,
R.string.drawer_close
) {
@Override
public void onDrawerClosed(View view) {
invalidateOptionsMenu();
setActionBarMode(ActionBar.NAVIGATION_MODE_TABS);
}
@Override
public void onDrawerOpened(View drawerView) {
invalidateOptionsMenu();
setActionBarMode(ActionBar.NAVIGATION_MODE_STANDARD);
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
这是我尝试过的:
- 将
onClickListener
设置为mDrawerLayout
。onClick
永远不会被调用 - 将
onTouchListener
设置为mDrawerLayout
。onTouch
永远不会被调用 - 研究了
ActionBarDrawerToggle
和DrawerLayout
类。找不到类似onDrawerStartedOpening
的内容。
最佳答案
已弃用:查看其他答案以获得更合适的解决方案
有两种可能的方法来做到这一点:
slideOffset
从 0 变为 1。1
表示完全打开,0
- 关闭。
一旦偏移量从 0
变为 !0
- 这意味着它开始打开过程。比如:
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
R.drawable.ic_drawer,
R.string.drawer_open,
R.string.drawer_close
) {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
if (slideOffset == 0
&& getActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_STANDARD) {
// drawer closed
getActionBar()
.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
invalidateOptionsMenu();
} else if (slideOffset != 0
&& getActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) {
// started opening
getActionBar()
.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
invalidateOptionsMenu();
}
super.onDrawerSlide(drawerView, slideOffset);
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
你需要听STATE_SETTLING
states - 每当抽屉开始移动(打开或关闭)时都会报告此状态。所以一旦你看到这个状态 - 检查抽屉现在是否打开并采取相应的行动:
mDrawerToggle = new ActionBarDrawerToggle(
this,
mDrawerLayout,
R.drawable.ic_drawer,
R.string.drawer_open,
R.string.drawer_close
) {
@Override
public void onDrawerStateChanged(int newState) {
if (newState == DrawerLayout.STATE_SETTLING) {
if (!isDrawerOpen()) {
// starts opening
getActionBar()
.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
} else {
// closing drawer
getActionBar()
.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}
invalidateOptionsMenu();
}
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
关于android - 如何检测 DrawerLayout 开始打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23373257/