DrawerLayout+ToolBar官方API实现仿网易V4.4.4导航抽屉
2015-04-25 02:50
429 查看
网易V4.4.4 的导航抽屉长啥样,我想在此无需多说,没见过的自己去体验吧。
当时吸引我的是左边滑动,箭头图标变菜单图标动画,这个非常不错。殊不知,Android5.0以上官方提供的API便可轻松实现。5.0以下,需要添加android-support-v7-appcompat包支持。这个在SDk V7目录下。
直接先看看实现运行效果图吧:(有网易效果了吧)
![](http://img.blog.csdn.net/20150425025533255)
![](http://img.blog.csdn.net/20150425025556858)
![](http://img.blog.csdn.net/20150425025614611)
![](http://img.blog.csdn.net/20150425025652425)
![](http://img.blog.csdn.net/20150425025704437)
下面谈谈实现要点:
先利用DrawerLayout创建导航抽屉,这个可以参考我上一篇博文:DrawerLayout 官方创建导航抽屉示例。
在我上一篇博文利用DrawerLayout创建导航抽屉的基础上,稍加修改便可实现。(不清楚的,可先上篇创建看看)
下面谈谈在利用DrawerLayout创建导航抽屉的基础上,具体修改如下:
1.2、添加主题风格
先在values/styles.xml添加:
上面创建一个基础风格,为了方便,以后要添加专属于values-v21的属性的话,可以在继承这个基础风格上,添加。
再在values-v21/styles.xml添加:
上面这个,主要是可以添加一些5.0可以显示的效果。
1.3、在MainActivity.java,初始化Toolbar:
2.2、将原来的getActionBar()的地方全部换成getSupportActionBar(),比如:
完成到这里,左边的抽屉便可以实现类似网易V4.4.4的滑动效果了
下面主要是实现overflow menu,也就是右边菜单的效果,及增加右边抽屉。
上面overflow menu部分,是为了实现icon+文字的效果,如果只需要显示文字,那直接去掉外面嵌套的自定义的action_overflow即可。
4.2、处理好Toolbar上点击左边按键,个人信息按键,用以控制显示左右抽屉:
在监听抽屉打开或者关闭回调部分,记录好左边还是右边打开的标志位:
设置好Toolbar监听,监听左边Button点击事件,以便处理相关抽屉打开或关闭:
在onOptionsItemSelected回调函数中,处理属于个人信息Button点击事件,也就是控制右边抽屉的Button点击事件,以便处理相关抽屉打开或关闭:
这样便可以实现左右抽屉自然滑动切换了。
上面只要是一些具体修改细节,详细Demo工程共享如下:http://download.csdn.net/detail/bighulk/8629899
当时吸引我的是左边滑动,箭头图标变菜单图标动画,这个非常不错。殊不知,Android5.0以上官方提供的API便可轻松实现。5.0以下,需要添加android-support-v7-appcompat包支持。这个在SDk V7目录下。
直接先看看实现运行效果图吧:(有网易效果了吧)
下面谈谈实现要点:
先利用DrawerLayout创建导航抽屉,这个可以参考我上一篇博文:DrawerLayout 官方创建导航抽屉示例。
在我上一篇博文利用DrawerLayout创建导航抽屉的基础上,稍加修改便可实现。(不清楚的,可先上篇创建看看)
下面谈谈在利用DrawerLayout创建导航抽屉的基础上,具体修改如下:
1. ActionBar改用ToolBar
1.1、在原来基础上,修改activity_main.xml,增加Toolbar这个控件<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <!-- 增加Toolbar --> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?attr/colorPrimary" android:minHeight="?attr/actionBarSize" app:popupTheme="@style/PopupMenuStyle" /> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- The main content view --> <FrameLayout android:id="@+id/content_frame" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- The navigation drawer --> <ListView android:id="@+id/left_drawer" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="#ffffff" android:choiceMode="singleChoice" android:divider="@android:color/transparent" android:dividerHeight="0dp" android:scrollbars="none" /> <TextView android:id="@+id/right_drawer" android:layout_width="280dp" android:layout_height="match_parent" android:layout_gravity="end" android:background="#ffffff" android:gravity="center" android:textColor="#444444" android:text="@string/right_drawer_info" android:textSize="30sp" > </TextView> </android.support.v4.widget.DrawerLayout> </LinearLayout>
1.2、添加主题风格
先在values/styles.xml添加:
<resources> <!-- Base application theme. --> <style name="AppTheme" parent="AppTheme.Base"> <!-- Customize your theme here. --> </style> <!-- 主要是这个基础风格 --> <style name="AppTheme.Base" parent="Theme.AppCompat"> <item name="windowActionBar">false</item> <item name="android:windowNoTitle">true</item> <!-- Actionbar color --> <item name="colorPrimary">#0077d9</item> <!-- Status bar color --> <item name="colorPrimaryDark">#5577d9</item> <!-- Window color --> <item name="android:windowBackground">@color/dim_foreground_material_light</item> </style> <style name="PopupMenuStyle" parent="Theme.AppCompat.Light"></style> </resources>
上面创建一个基础风格,为了方便,以后要添加专属于values-v21的属性的话,可以在继承这个基础风格上,添加。
再在values-v21/styles.xml添加:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="AppTheme" parent="AppTheme.Base"> <!-- Navigation bar color --> <item name="android:navigationBarColor">@color/accent_material_light</item> </style> </resources>
上面这个,主要是可以添加一些5.0可以显示的效果。
1.3、在MainActivity.java,初始化Toolbar:
public class MainActivity extends ActionBarActivity { …… @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar);
2. v4.app.ActionBarDrawerToggle改用v7.app.ActionBarDrawerToggle
2.1、换用v7.app.ActionBarDrawerToggle,实例化ActionBarDrawerToggle,传入Toolbarpublic class MainActivity extends ActionBarActivity { …… @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); …… mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { public void onDrawerClosed(View drawerView) { if (drawerView == mDrawerList) { isDirection_left = false; } else if (drawerView == mPersonLayout) { isDirection_right = false; } getSupportActionBar().setTitle(mTitle); invalidateOptionsMenu(); // creates call to // onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { if (drawerView == mDrawerList) { isDirection_left = true; } else if (drawerView == mPersonLayout) { isDirection_right = true; } getSupportActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); // creates call to // onPrepareOptionsMenu() } };
2.2、将原来的getActionBar()的地方全部换成getSupportActionBar(),比如:
public class MainActivity extends ActionBarActivity { …… getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); // ActionBarDrawerToggle ties together the the proper interactions // between the sliding drawer and the action bar app icon
完成到这里,左边的抽屉便可以实现类似网易V4.4.4的滑动效果了
下面主要是实现overflow menu,也就是右边菜单的效果,及增加右边抽屉。
3、ToolBar上面的overflow menu 实现图标+文字
3.1、修改menu/main.xml:<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <!-- 这是Toolbar上的搜索Button --> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:title="@string/action_search" app:showAsAction="ifRoom"/> <!-- 这是Toolbar上的个人信息Button --> <item android:id="@+id/action_person" android:icon="@drawable/ic_action_person" android:title="@string/action_persion" app:showAsAction="ifRoom"/> <!-- 这是Toolbar上的overflow menu --> <item android:id="@+id/action_overflow" android:icon="@drawable/ic_action_overflow" android:title="@string/action_search" app:showAsAction="ifRoom"> <menu> <item android:id="@+id/action_about" android:icon="@drawable/ic_action_about" android:showAsAction="always|withText" android:title="@string/action_about"/> <item android:id="@+id/action_settings" android:icon="@drawable/ic_action_settings" android:showAsAction="always|withText" android:title="@string/action_settings"/> </menu> </item> </menu>
上面overflow menu部分,是为了实现icon+文字的效果,如果只需要显示文字,那直接去掉外面嵌套的自定义的action_overflow即可。
4、实现左右滑动抽屉
4.1、修改layout/activity_main.xml,增加作为右边抽屉显示的View,下面是直接简单用textview作为显示:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > …… <!-- 增加右边抽屉显示 --> <TextView android:id="@+id/right_drawer" android:layout_width="280dp" android:layout_height="match_parent" android:layout_gravity="end" android:background="#ffffff" android:gravity="center" android:textColor="#444444" android:text="@string/right_drawer_info" android:textSize="30sp" > </TextView> </android.support.v4.widget.DrawerLayout> </LinearLayout>
4.2、处理好Toolbar上点击左边按键,个人信息按键,用以控制显示左右抽屉:
在监听抽屉打开或者关闭回调部分,记录好左边还是右边打开的标志位:
// ActionBarDrawerToggle ties together the the proper interactions // between the sliding drawer and the action bar app icon mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) { public void onDrawerClosed(View drawerView) { if (drawerView == mDrawerList) { isDirection_left = false; } else if (drawerView == mPersonLayout) { isDirection_right = false; } getSupportActionBar().setTitle(mTitle); invalidateOptionsMenu(); // creates call to // onPrepareOptionsMenu() } public void onDrawerOpened(View drawerView) { if (drawerView == mDrawerList) { isDirection_left = true; } else if (drawerView == mPersonLayout) { isDirection_right = true; } getSupportActionBar().setTitle(mDrawerTitle); invalidateOptionsMenu(); // creates call to // onPrepareOptionsMenu() } };
设置好Toolbar监听,监听左边Button点击事件,以便处理相关抽屉打开或关闭:
toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // catch here title and home icon click if (isDirection_right) { mDrawerLayout.closeDrawer(mPersonLayout); } else { if (!isDirection_left) { mDrawerLayout.openDrawer(mDrawerList); } else { mDrawerLayout.closeDrawer(mDrawerList); } } } });
在onOptionsItemSelected回调函数中,处理属于个人信息Button点击事件,也就是控制右边抽屉的Button点击事件,以便处理相关抽屉打开或关闭:
@Override public boolean onOptionsItemSelected(MenuItem item) { // The action bar home/up action should open or close the drawer. // ActionBarDrawerToggle will take care of this. if (mDrawerToggle.onOptionsItemSelected(item)) { return true; } // Handle action buttons switch (item.getItemId()) { …… case R.id.action_person: if (isDirection_left) { mDrawerLayout.closeDrawer(mDrawerList); } else { if (!isDirection_right) { mDrawerLayout.openDrawer(mPersonLayout); } else { mDrawerLayout.closeDrawer(mPersonLayout); } } break; default: break; } return super.onOptionsItemSelected(item); }
这样便可以实现左右抽屉自然滑动切换了。
上面只要是一些具体修改细节,详细Demo工程共享如下:http://download.csdn.net/detail/bighulk/8629899
相关文章推荐
- 基于Android官方DrawerLayout实现抽屉导航菜单
- 基于Android官方DrawerLayout实现抽屉导航菜单
- 基于Android官方DrawerLayout实现抽屉导航菜单
- 基于谷歌官方DrawerLayout实现QQ样式边侧滑抽屉缩进缩出技术
- Toolbar+DrawerLayout实现知乎app抽屉菜单侧边拉出并带有箭头动画效果
- ToolBar+DrawerLayout实现左右双布局侧滑和动画返回控制显示抽屉布局
- 基于谷歌官方DrawerLayout实现QQ样式边侧滑抽屉缩进缩出技术
- android开发游记:DrawerLayout 实现抽屉效果的导航菜单
- android 5.X Toolbar+DrawerLayout实现抽屉菜单
- Toolbar结合DrawerLayout实现的抽屉菜单
- Android DrawerLayout抽屉效果的导航菜单实现
- Android 使用Toolbar+DrawerLayout快速实现仿“知乎APP”侧滑导航效果
- android 5.X Toolbar+DrawerLayout实现抽屉菜单
- Android 使用Toolbar+DrawerLayout快速实现仿“知乎APP”侧滑导航效果
- ToolBar和DrawerLayout的使用实现侧拉栏抽屉的开闭
- Kotlin实现侧滑抽屉菜单(DrawerLayout+NavigationView+Toolbar)
- Android实现侧滑抽屉菜单(DrawerLayout+NavigationView+toolbar)
- Android 使用DrawerLayout实现抽屉效果的导航菜单
- 使用Toolbar + DrawerLayout实现侧滑和改变toolbar左边按钮颜色
- android组件之DrawerLayout(抽屉导航)-- 侧滑菜单效果