像在android L中一样实现NavigationDrawer图标

时间:2014-10-14 12:14:38

标签: android android-5.0-lollipop

如何在NavigationDrawer中实施Android L图标。

我更新了Play商店应用,在那里我可以看到导航抽屉的图标,例如this

这里有一个很大的变化是新的“hamburger”按钮,它更大,与左边缘隔开,不再有类别图标。单击它可打开侧面菜单,图标变为带有平滑小动画的后退箭头。

是否可以在较低版本的android中实现相同的功能?

任何示例或样本?

2 个答案:

答案 0 :(得分:4)

编辑 - 10月18日

截至10月17日,没有必要再使用第三方库了。 Google刚刚发布了Android 5.0 SDK以及新的v7 appcompat library。新的v7 appcompat added support for material design user interfaces 更新了ActionBarDrawerToggle,其中包含菜单到箭头的动画
因此,为了在您的NavigationDrawer中使用Burger-to-Arrow动画,您必须像以前一样使用新的ActionBarDrawerToggle(导入android.support.v7.app.ActionBarDrawerToggle)和NavigationDrawer(参见Developer Training)。


虽然 ActionView by markushi 为您提供汉堡图标和箭头之间所需的转换,但它缺少在“标准”操作栏中使用的选项。为此,您应该考虑使用库 material-menu by balysv

库本身的使用可能很简单,但如果您之前使用过ActionBarDrawerToggle,则应将其删除。

对于想要在没有ActionBarDrawerToggle但使用DrawerLayout库的情况下使用MaterialMenu的所有人,只需要一点“操作方法”:

1 - 在build.gradle文件中添加库

dependencies {
    //...
    compile 'com.balysv.materialmenu:material-menu:1.3.1'
}

2 - 初始 MaterialMenuIcon

materialMenu = new MaterialMenuIcon(this, Color.WHITE, MaterialMenuDrawable.Stroke.THIN);

3 - 设置DrawerListener并相应地更改 IconState

   mDrawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            materialMenu.setTransformationOffset(
                    MaterialMenuDrawable.AnimationState.BURGER_ARROW,
                    isDrawerOpened ? 2 - slideOffset : slideOffset
            );
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            isDrawerOpened = true;
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            isDrawerOpened = false;
        }
    });

注意: isDrawerOpened应为全局变量

4 - 打开/关闭NavDrawer

将此添加到onOptionsItemSelected(MenuItem item)

   if(item.getItemId() == android.R.id.home) {
        if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) {
            mDrawerLayout.closeDrawer(GravityCompat.START);
        } else {
            mDrawerLayout.openDrawer(GravityCompat.START);
        }
    }

注意:由于我们没有使用ActionBarDrawerToggle,因此我们自行完成此操作。

可以找到保存MenuIcon状态的其他步骤here

修改

正如Piyush Kukadiya所述,出于兼容性原因,MaterialMenu使用NineOldAndroids。如果您不想要这个,因为您的应用程序仅支持API级别11及更高版本,这是您大致需要做的事情(虽然我说它可能不值得麻烦 - 此外您只能节省39kb):

  1. 从GitHub下载图书馆
  2. 将其作为新模块导入您的项目
  3. 将其设置为app-module
  4. 的依赖项
  5. 从库的'com.nineoldandroids:library:2.4.0'文件中删除编译build.gradle并将minSdk设置为11
  6. 删除任何导入引用com.nineoldandroids.*

答案 1 :(得分:0)

当Google发布新的支持库Android Support Library, revision 21时,您可以看到如何在ActionBarDrawerToggle此页面中实现效果。