在实现开发要求中,有需要会使用抽屉式布局,类似于QQ5.0的侧滑菜单,实现的方式有很多种,可以自定义控件,也可以使用第三方开源库。

同样的谷歌也推出了自己的侧滑组件——DrawLayout,使用方式也很简单,配合着toolbar有着不一样的滑动效果,所以推荐大家使用。

如下是效果图,是不是更具交互性,更加酷炫?

**首先是XML**

drawlayout分为两部分:侧滑界面和内容界面,所以drawlayout中应该有两个布局,在侧滑的布局中设置属性:android:layout_gravity="start",就可以实现侧滑了。

下面是XML文件,仅作参考:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/dl_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/ll_content">
<android.support.design.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/cl_content">
<include layout="@layout/head_home"/>
</android.support.design.widget.CoordinatorLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/fl_content"></FrameLayout>
<android.support.v4.app.FragmentTabHost
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways"
android:id="@+id/ft_host">
</android.support.v4.app.FragmentTabHost>
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nv_left_content"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:itemIconTint="#333"
app:itemTextColor="#333"
app:headerLayout="@layout/left_home_top"
app:menu="@menu/left_home_botton"
/>
</android.support.v4.widget.DrawerLayout>

**代码部分**

接下来就是让toolbar和drawlayout关联起来。这部分也很简单。让toolbar代替actionbar。这里有个注意点,不能让Activity继承Activity,而是继承于它的子类AppCompatActivity,否则是找不到setSupportActionBar(toolbar)这个方法的,当我们关联起来之后,就可以使用ActionBarDrawerToggle了,它实现了

drawlayout的滑动监听,谷歌也将它和Material Design风格的动画特效关联起来了。

当我们实现了这一步时,让我们看看效果:

可以发现,按钮被挡住了,如果你用过印象笔记的客户端,你会发现,它的侧滑按钮也被挡住了,所以一点都不酷炫了!!!!!

但是作为一个追求完美无bug的安卓开发人员是绝对不允许这样的事的。

**重写onDrawerSlide**

通过重写onDrawerSlide方法重新获取滑动范围,让他贴着内容界面划出。代码也很简单这里贴出主要代码:

    private void initView() {
setSupportActionBar(toolbar);
drawerToggle=new ActionBarDrawerToggle(this,drawerLayout,toolbar,
R.string.open,R.string.close){
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
WindowManager windowManager= (WindowManager) getSystemService(
getApplicationContext().WINDOW_SERVICE);
Display display=windowManager.getDefaultDisplay();
linearLayout.layout(navigationView.getRight(),
0,
display.getWidth()+navigationView.getRight(),
display.getHeight());
super.onDrawerSlide(drawerView, slideOffset);
} };
drawerLayout.setDrawerListener(drawerToggle);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); }
@Override
public void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
} @Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}

最终的效果图就是开篇的效果,是不是很酷炫,用户体验也比传统的侧滑好的多了。最后多谢浏览,我会继续加油哒!

最新文章

  1. CSS 基础语法
  2. R画图中英文字体完美解决方案
  3. IR的评价指标-MAP,NDCG和MRR
  4. ios frame bounds applicationframe
  5. android 开源 + 一些素材网站
  6. javascript--烟火效果
  7. 汉字转整数,比系统简单易用!a2iLxx (覆盖物 16十六进制,VC6亲测可用)请提供意见~
  8. 建立TCP连接的三次握手
  9. phpfpm配置 php中的坑
  10. 深度理解 React Suspense(附源码解析)
  11. 多线程之CEvent
  12. Jrebel 配置
  13. 『TensorFlow』批处理类
  14. ucml 查询组件
  15. Java构建指定大小文件
  16. Wooden Sticks(hdu1501)(sort,dp)
  17. Innodb页面存储结构-2
  18. 续:纠正:debian【4】可以安装,而且完美的安装 ! for《Oracle-10.2.0.1,打补丁10.2.0.5:在 debian 版本4【不含4】以上,及 ubuntu 7.04【不含7.04】以上都可以安装!》
  19. C# volatile 关键字
  20. excel 取前几位文字

热门文章

  1. Sprint第一个冲刺(第三天)
  2. 网络赛牡丹江赛区E ZOJ3813(线段树)
  3. orientdb 图数据库docker 安装试用
  4. Cucumber 之Gherkin
  5. #define用法
  6. Eclipse导入工程后,XDoclet错误:Missing library: xdoclet-1.2.1.jar. Select the home directory for XDoclet
  7. cowboy的get和post的例子
  8. (转)JavaMail中的Flag(邮件状态)
  9. appium在android7.0上无法启动问题
  10. PAT 甲级1003 Emergency (25)(25 分)(Dikjstra,也可以自己到自己!)