DrawerLayout打开前的事件

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并提供新的活动.我要重新发明轮子:-)还是已经有人这样做了?

Fre*_*red 5

此链接可以帮助您解决问题.如何检测DrawerLayout是否开始打开?

使用onDrawerStateChanged(int newState)回调

您需要侦听STATE_SETTLING状态 - 每当抽屉开始移动(打开或关闭)时都会报告此状态.所以,一旦你看到这种状态 - 检查抽屉是否现在打开并相应地采取行动:

    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);
Run Code Online (Sandbox Code Playgroud)