Gáb*_*bor 3 android navigation-drawer
在我看来,DrawerLayout实现中缺少一件事:在抽屉打开之前触发的事件.
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerClosed(View view) {
//...
}
public void onBeforeDrawerOpened(View drawerView) {
//...
}
public void onDrawerOpened(View drawerView) {
//...
}
};
Run Code Online (Sandbox Code Playgroud)
需要它的原因是设置抽屉项目的状态,如选择,启用和类似的菜单项.将它放入onDrawerOpened()回调有点可行,但在打开后更改菜单外观看起来并不正确.
我的第一个想法是扩展ActionBarDrawerToggle并提供新的活动.我要重新发明轮子:-)还是已经有人这样做了?
此链接可以帮助您解决问题.如何检测DrawerLayout是否开始打开?
使用onDrawerStateChanged(int newState)回调
您需要侦听STATE_SETTLING状态 - 每当抽屉开始移动(打开或关闭)时都会报告此状态.所以,一旦你看到这种状态 - 检查抽屉是否现在打开并相应地采取行动:
Run Code Online (Sandbox Code Playgroud)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);