适用于KitKat的Android 5.0材质devise风格导航抽屉

我看到Android引入了新的导航抽屉图标,抽屉图标和后退箭头图标。 我们如何在Kitkat支持的应用程序中使用它。 请参阅Google最新版的报亭应用,其中包含最新的导航抽屉图标和animation。 我们怎样才能实现呢?

我曾尝试将minSDK设置为19,将complileSDK设置为21,但使用的是旧式图标。 这是自我实现的吗?

您需要使用appcompat v21中的新工具栏以及此库中的新ActionBarDrawerToggle

将gradle依赖项添加到您的gradle文件中:

 compile 'com.android.support:appcompat-v7:21.0.0' 

你的activity_main.xml布局看起来像这样:

 <!--I use android:fitsSystemWindows because I am changing the color of the statusbar as well--> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/main_parent_view" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:fitsSystemWindows="true"> <include layout="@layout/toolbar"/> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Main layout --> <FrameLayout android:id="@+id/main_fragment_container" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- Nav drawer --> <fragment android:id="@+id/fragment_drawer" android:name="com.example.packagename.DrawerFragment" android:layout_width="@dimen/drawer_width" android:layout_height="match_parent" android:layout_gravity="left|start" /> </android.support.v4.widget.DrawerLayout> </LinearLayout> 

您的工具栏布局看起来像这样:

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/toolbar" app:theme="@style/ThemeOverlay.AppCompat.ActionBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" android:background="?attr/colorPrimary"/> 

您的活动必须延伸至:

 ActionBarActivity 

当您在活动中find您的视图(抽屉和工具栏)时,将工具栏设置为支持操作栏并设置setDrawerListener:

 setSupportActionBar(mToolbar); mDrawerToggle= new ActionBarDrawerToggle(this, mDrawerLayout,mToolbar, R.string.app_name, R.string.app_name); mDrawerLayout.setDrawerListener(mDrawerToggle); 

之后,您只需要照顾菜单项和drawerToogle状态:

  @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = new MenuInflater(this); inflater.inflate(R.menu.menu_main,menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } return super.onOptionsItemSelected(item); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public void onBackPressed() { if(mDrawerLayout.isDrawerOpen(Gravity.START|Gravity.LEFT)){ mDrawerLayout.closeDrawers(); return; } super.onBackPressed(); } 

实现与“工具栏”之前相同,您可以免费获得箭头animation。 没有头痛。 有关更多信息,请按照

  • 文档 。

  • ChrisBanes发布

  • 官方的Android博客文章 。

如果要在工具栏上和状态栏下方显示抽屉,请参阅此问题 。

编辑:使用支持devise库中的NavigationView。 学习如何在这里使用的教程: http : //antonioleiva.com/navigation-view/

如果您想要具有材质devise风格( 在此定义)的真实导航抽屉,
我已经实现了一个自定义库,做到这一点。
你可以在这里find它

支持最新评论以及新生成的main_content的布局。 我只是用DrawerLayout覆盖包含的内容布局。 请记住,您的drawerlayout必须具有此layout_behavior:appbar_scrolling_view_behavior

顶层容器的布局https://github.com/juanmendez/jm_android_dev/blob/master/01.fragments/06.fragments_with_rx/app/src/main/res/layout/activity_recycler.xml#L17

包含的内容布局https://github.com/juanmendez/jm_android_dev/blob/master/01.fragments/06.fragments_with_rx/app/src/main/res/layout/content_recycler.xml#L9

看到导航抽屉!