使用新的NavigationView还是建议使用ActionBarDrawerToggle,或者这不是“ Material 设计”吗?例如,以前我们应该在打开抽屉时隐藏操作栏项目,但是现在准则要求它们应该保留。

最佳答案



不,不是必需的。

如果您查看新设计库的“官方” demo code,则不再使用ActionBarDrawerToggle,因为新的NavigationViewAppCompatActivity并不需要它。

使用新的v22支持库,您可以剥离所有ActionBarDrawerToggle代码,而只需使用以下内容即可处理NavigationDrawerActionBar/ToolBar汉堡包图标之间的交互:

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    final ActionBar actionBar = getSupportActionBar();
    actionBar.setHomeAsUpIndicator(R.drawable.ic_menu);
    actionBar.setDisplayHomeAsUpEnabled(true);
    ...
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            mDrawerLayout.openDrawer(GravityCompat.START);
            return true;
        ....
    }
    return super.onOptionsItemSelected(item);
}

您将需要提供自己的“汉堡”可绘制对象(在我的示例中为R.drawable.ic_menu)。除此之外,上面的代码是处理抽屉打开所需要的全部。 android.R.id.home中的onOptionsItemSelected()大小写代表您的汉堡抽屉按钮。它指向一个内置的资源ID(添加到菜单xml中的而不是),并且会自动处理。

除此之外,您还需要通过简单地将closeDrawers()添加到您的点击监听器来实现抽屉的关闭,如下所示:
navigationView.setNavigationItemSelectedListener(
    new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            // Handle menu item clicks here.
            drawerLayout.closeDrawers();
            return true;
        }
    });
closeDrawers()是DrawerLayout的一种方法,可以处理所有事情。就是这样。这就是您现在正确处理抽屉导航所需的全部代码。不再需要用于翻转汉堡包等的凌乱代码!

当然,如果确实愿意,您仍然可以将NavigationViewActionBarDrawerToggle一起使用。但是您当然不必。

如果要抽屉回调

即使打开/关闭抽屉不需要ActionBarDrawerToggle,它对于处理其他回调也仍然有用(特别是如果您已经在使用ActionBar的话)。否则,您可以使用DrawerLayout.DrawerListenerDrawerLayout.SimpleDrawerListener()来实现自己的功能,以处理其他与打开/关闭相关的事件。

09-28 04:35