Android开发实战之拥有Material Design风格的抽屉式布局

在实现开发要求中,有需要会使用抽屉式布局,类似于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);
    }

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

时间: 2024-12-22 04:41:17

Android开发实战之拥有Material Design风格的抽屉式布局的相关文章

Android开发实战之拥有Material Design风格的折叠布局

关于折叠布局,也许你并不陌生,最新版的陌陌,或者一些其他的社交APP都有一个折叠布局.折叠布局,让我们的APP更加具有交互性,同时也更加美观,先来展示一下效果图: 这是我个人做的一个APP主界面,可以看到,在滑动的时候,大标题随着拉动变为小标题,同时移动位置,并且有一张图片,随滑动淡出屏幕.如果你了解过Material Design,那么这个看似复杂的效果就很容易实现,都是用到这个desigon依赖库中的组件属性而完成的. 首先加入依赖库: compile 'com.android.suppor

创建Material Design风格的Android应用--应用主题

昨天正式发布了android 5,同时android developer网站也更新了,增加了创建Material Design风格的Android应用指南,也更新了Support Library,在support library增加了一些Material Design风格的控件和动画等,这里给大家简单介绍一下怎样开发material design风格的Android应用. android 5使用Material Design风格 android提供了三种Material Design风格Them

Android控件使用 — 12个Material Design风格控件的使用

项目在GitHub上的地址: https://github.com/Hebin320/MaterialDesignUse 1.AppBarLayout.ToolBar AppBarLayout 是继承LinerLayout实现的一个ViewGroup容器组件,它是为了Material Design设计的App Bar,支持手势滑动操作. AppBarLayout必须作为Toolbar的父布局容器,也可以配合CoordinatorLayout一起使用. ToolBar是谷歌新推出的代替Action

开发Google Material Design风格的WPF程序

今天在网上看到了一个Material Design风格的WPF皮肤,看上去还是挺不错的 这个项目是开源的,感兴趣的朋友可以下载试下: https://github.com/ButchersBoy/MaterialDesignInXamlToolkit. 另外,该作者还实现了一个WinForm版本的:https://github.com/IgnaceMaes/MaterialSkin,不过貌似没有WPF版实现的好

打造Material Design风格的TabBar

自从Material Design问世以来, 各种Material Design风格的控件层出不穷, 尤其是google家的几个APP更是将Material Design应用到了极致. 最近在使用google photos的时候发现这款软件的Tabbar做的非常不错, 内容突出, Material Design风味很浓, 再者, 我还没有做过一个Material Design风格的Tabbar, 所以萌生了仿照一个google photos这种tabbar的念想, 今天我们就来一步步的去实现一下

教你轻松实现Material Design风格的知乎主页(详解多种控件的综合使用)

本文讲主要来说说Toolbar.RecyclerView.CardView.DrawerLayout.以及SwiperefreshLayout的综合使用,其中Toolbar和RecyclerView在前几篇博客已经详细讲述其用法了,有兴趣的可以去看看.现在利用这几个控件实现Material Design风格的知乎主页(Android v3.3版 知乎),在讲到相关控件的时候,我也会提及一下这个控件的用法.那么,让我们开始控件之旅吧. 示例效果 在动手写代码之前,我们先要看看最终的实现效果是什么:

手把手教你打造一个Material Design风格的App(一)

你应该听说过Android的Material Design,它是在Android 5.0(Lollipop)版本引入的.在Material Design中还引入了很多新东西,比如Material Theme,新的小部件,自定义的阴影,矢量图片及自定义动画等.如果你之前没有用过Material Design,那么本文将是一个很好的入门教程. 在这篇教程中,我们将会学习Material Design开发的基本步骤,即编写自定义的主题以及使用RecyclerView来实现抽屉导航. 通过下面的两个链接

傻瓜式 Material Design 风格矢量图标生成器

Android开发者有福了,安利一款傻瓜式 Material Design 风格图标生成器. 一键选择已有素材,可调节形状.颜色.阴影,以及图标大小,并可打包下载,生成各种自适应的格式.没有设计师也能调教出高大上的图标来: 可调节颜色,居中显示 一键下载 拖动可调整位置 不知道这样的傻瓜式工具能否入设计师的法眼呢??? 附上链接:(chrome完美,Safari9上有bug) http://jaqen.me/mdpub

基于React Native的Material Design风格的组件库 MRN

基于React Native的Material Design风格的组件库.(为了平台统一体验,目前只打算支持安卓) 官方网站 http://mrn.js.org/ Github https://github.com/binggg/mrn 示例应用在线演示 https://appetize.io/app/j48zj9r83cetpd1mhg4g8buc4w 示例应用下载 https://github.com/binggg/MaterialReactNative/blob/master/androi