首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NavigationView和ActionBarDrawerToggle

NavigationView和ActionBarDrawerToggle
EN

Stack Overflow用户
提问于 2015-06-02 02:20:00
回答 3查看 7.9K关注 0票数 9

对于新的NavigationView,是否仍然推荐使用ActionBarDrawerToggle,或者这不是“材料设计”?例如,以前我们应该在抽屉打开时隐藏动作栏项目,但现在指南说它们应该留下来。

EN

回答 3

Stack Overflow用户

发布于 2015-06-03 14:12:33

使用新NavigationView

是否仍建议使用ActionBarDrawerToggle

不,这不是必需的。

如果你看看新设计库的“官方”demo code,就会发现ActionBarDrawerToggle不再被使用了,因为新的NavigationViewAppCompatActivity实际上并不需要它。

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

代码语言:javascript
复制
@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 (,而不是您添加到menu中的),并且它是自动处理的。

除此之外,您还必须通过向单击监听器添加closeDrawers()来实现抽屉的关闭,如下所示:

代码语言:javascript
复制
navigationView.setNavigationItemSelectedListener(
    new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(MenuItem menuItem) {
            // Handle menu item clicks here.
            drawerLayout.closeDrawers();
            return true;
        }
    });

closeDrawers()是DrawerLayout的一种方法,它负责处理所有事情。就这样。这就是您现在正确处理导航抽屉所需的全部代码。再也没有乱七八糟的汉堡包代码了!

当然,如果您真的想这样做,您仍然可以通过旧方法在ActionBarDrawerToggle中使用NavigationView。但你当然不需要这么做。

如果您想要抽屉回调,则为

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

票数 17
EN

Stack Overflow用户

发布于 2015-06-02 02:29:25

使用新NavigationView

是否仍建议使用ActionBarDrawerToggle

是。这两者解决了导航抽屉的两个完全不同的方面。

总而言之,导航抽屉通常有三个组件:

DrawerLayout

  • Your导航抽屉内容
  • 显示和隐藏抽屉

的方法

DrawerLayout是包含导航抽屉内容和应用程序内容的布局。它允许您从侧面拉起抽屉,并将抽屉显示在应用程序的内容之上(DrawerLayout的第一个子项)。

导航抽屉内容(DrawerLayout的第二个子项)通常是用户可以单击的项目列表。以前,我见过的大多数实现都使用了ListViewRecyclerView,也许还使用了某种类型的头。NavigationView是对此的替代,用于提供与材料兼容的抽屉内容。

ActionBarDrawerToggle用于在应用程序栏中提供汉堡包图标。它允许用户点击图标来打开或关闭您的抽屉。

票数 1
EN

Stack Overflow用户

发布于 2015-06-25 23:33:32

完成其他答案,导航视图应该适合整个屏幕的高度,以便它将隐藏汉堡包图标时打开。正因为如此,从汉堡到箭头的动画甚至只显示箭头都是没有必要的。

但是当点击当前屏幕时,它会转到另一个片段,想象一个照片图库,点击一张照片将显示它更大,应该有一个从汉堡到箭头的动画,箭头应该留下来,当按下时,应该有一个反向动画到汉堡,以便导航视图可以再次打开。

您仍然可以使用ActionBarDrawerToggle实现这一点,甚至可以使用导航视图,因为它使用与以前相同的DrawerLayout。所以它仍然有用处,但当然不是必要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30580478

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档