如何在NavigationDrawer
中实施Android L
图标。
我更新了Play商店应用,在那里我可以看到导航抽屉的图标,例如this:
这里有一个很大的变化是新的“hamburger
”按钮,它更大,与左边缘隔开,不再有类别图标。单击它可打开侧面菜单,图标变为带有平滑小动画的后退箭头。
是否可以在较低版本的android中实现相同的功能?
任何示例或样本?
答案 0 :(得分:4)
截至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
的所有人,只需要一点“操作方法”:
dependencies {
//...
compile 'com.balysv.materialmenu:material-menu:1.3.1'
}
materialMenu = new MaterialMenuIcon(this, Color.WHITE, MaterialMenuDrawable.Stroke.THIN);
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
应为全局变量
将此添加到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):
'com.nineoldandroids:library:2.4.0'
文件中删除编译build.gradle
并将minSdk
设置为11 com.nineoldandroids.*
答案 1 :(得分:0)
当Google发布新的支持库Android Support Library, revision 21时,您可以看到如何在ActionBarDrawerToggle此页面中实现效果。