android - NavigationView 和 ActionBarDrawerToggle

标签 android navigation-drawer android-support-library android-design-library

使用新的 NavigationView 是否仍建议使用 ActionBarDrawerToggle 还是这不是“ Material 设计”?例如,以前我们应该在抽屉打开时隐藏操作栏项目,但现在指南说它们应该保留。

最佳答案

With the new NavigationView is it still recommended to use ActionBarDrawerToggle

不,这不是必需的。

如果你看“官方”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)。除此之外,上面的代码是处理抽屉打开所需的全部代码。 onOptionsItemSelected() 中的 android.R.id.home 案例代表您的汉堡包抽屉按钮。它指向一个内置资源 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.DrawerListener 或使用 DrawerLayout.SimpleDrawerListener() 来实现自己的功能,以处理其他打开/关闭相关事件。

关于android - NavigationView 和 ActionBarDrawerToggle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30580478/

相关文章:

java - 如何使用Android抽屉导航切换回Main Activity

java - 导航组件 : Passing arguments from global actions results in NullPointerException

android - 在一个 Activity 中从左侧和右侧抽屉导航

java - GridLayout 不会显示在网格中

android - 如何协调相机预览尺寸和图片尺寸之间的纵横比差异

android - C2DM Messaging 在本地服务器上运行但不在生产环境中运行(Google App Engine)

android - 视差图像在支持库 24.2.0 上未正确显示

android - getSupportActionBar() 使用 Robolectric 返回 null

javascript - 如何使用 Cordova 在手机中缓存数据?

java - 即使我声明了 Android 权限也不起作用