详解android特性之CoordinatorLayout用法探析实例

详解android特性之CoordinatorLayout用法探析实例,第1张

概述当我在AS上新建一个module时,系统默认的最外层布局不再是我们熟悉的五大布局中的一种,而是一个全新的布局:CoordinatorLayout。它是Material风格的重要组件,作为布局的顶层控件,协调(Coordinate)其他组件,实现联动

当我在AS上新建一个module时,系统默认的最外层布局不再是我们熟悉的五大布局中的一种,而是一个全新的布局:CoordinatorLayout。它是Material风格的重要组件,作为布局的顶层控件,协调(Coordinate)其他组件,实现联动。

下面来看一个最简单的例子,CoordinatorLayout与floatingActionbutton的使用,它可以使浮动按钮上下移动,为Snackbar流出空间来展示。

定义的布局文件如下:

<?xml version="1.0" enCoding="utf-8"?> <androID.support.design.Widget.CoordinatorLayout xmlns:androID="http://schemas.androID.com/apk/res/androID" xmlns:tools="http://schemas.androID.com/tools" androID:layout_wIDth="match_parent" androID:layout_height="match_parent" androID:fitsSystemwindows="true" tools:context="com.lingyun.coordinatorlayoutdemo.MainActivity"> <androID.support.design.Widget.floatingActionbutton androID:ID="@+ID/fab" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:layout_gravity="bottom|end" androID:layout_margin="@dimen/fab_margin" androID:src="@androID:drawable/ic_dialog_email" /> </androID.support.design.Widget.CoordinatorLayout>

代码就很简单了,如下:

floatingActionbutton fab = (floatingActionbutton) findVIEwByID(R.ID.fab);   fab.setonClickListener(new VIEw.OnClickListener() {     @OverrIDe     public voID onClick(VIEw vIEw) {       Snackbar.make(vIEw,"Replace with your own action",Snackbar.LENGTH_LONG)           .setAction("Action",null).show();     }   });    } 

就是通过findVIEwByID获取floatingActionbutton,设置点击事件,在onclick中让Snackbar显示一下即可。那么,效果图就像下面展示的莪一样:


接下来看一个高级点的效果,就是标题栏,也就是Toolbar的扩展与收缩效果。要想要Toolbar响应滚动事件,这里我们需要用到一个控件:AppbarLayout,这个控件必须作为CoordinatorLayout的直接子VIEw,才会响应滚动事件。首先因为我们的Toobar是需要响应滚动的视图,所以需要为其配置一个属性:layout_scrollFlags。然后呢,我们需要定义一下AppbarLayout与滚动视图(如RecyclerVIEw,nestedScrollVIEw等可以支持嵌套滚动的控件)supportlibrary包含了一个特殊的字符串资源@string/appbar_scrolling_vIEw_behavior,它和AppBarLayout.ScrollingViewBehavior相匹配,用来通知AppbarLayout 这个特殊的vIEw何时发生了滚动事件,这个behavior需要设置在触发事件(滚动)的vIEw之上。最终layout布局如下:

主布局(activity_main.xml):

<?xml version="1.0" enCoding="utf-8"?> <androID.support.design.Widget.CoordinatorLayout    xmlns:androID="http://schemas.androID.com/apk/res/androID"   androID:layout_wIDth="match_parent"   androID:layout_height="match_parent">    <include layout="@layout/appbar_main"/>    <include layout="@layout/content_main" />    <androID.support.design.Widget.floatingActionbutton     androID:ID="@+ID/fab"     androID:layout_wIDth="wrap_content"     androID:layout_height="wrap_content"     androID:layout_gravity="bottom|end"     androID:layout_margin="@dimen/fab_margin"     androID:src="@androID:drawable/ic_dialog_email" />  </androID.support.design.Widget.CoordinatorLayout> 

appbar_main.xml布局:

<?xml version="1.0" enCoding="utf-8"?> <androID.support.design.Widget.AppbarLayout   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="wrap_content"   androID:theme="@style/themeOverlay.AppCompat.Dark.Actionbar">    <androID.support.v7.Widget.Toolbar     androID:ID="@+ID/toolbar"     androID:layout_wIDth="match_parent"     androID:layout_height="?attr/actionbarSize"     app:popuptheme="@style/themeOverlay.AppCompat.light"     androID:background="?attr/colorPrimary"     app:layout_scrollFlags="scroll|enteralways"/>  </androID.support.design.Widget.AppbarLayout> 

content_main.xml布局:

<?xml version="1.0" enCoding="utf-8"?> <androID.support.v4.Widget.nestedScrollVIEw   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"   app:layout_behavior="@string/appbar_scrolling_vIEw_behavior">    <TextVIEw     androID:layout_wIDth="match_parent"     androID:layout_height="match_parent"     androID:gravity="center"     androID:text="你是谁?你从哪里来?你到哪里去?"/> </androID.support.v4.Widget.nestedScrollVIEw> 

效果图如下:


通过效果显示,当视图在滚动的时候,Toolbar滚出了屏幕,为内容区域留出了更大空间。其中控制Toolbar是否可以滚出屏幕的属性是由app:layout_scrollFlags="scroll|enteralways"。来说一下这个属性,要想滚出屏幕layout_scrollFlags必须设置scrll这个flag。剩下的几个flag解释如下:

enteralways:只要滚动视图向下滚动,vIEw就会显示出来。

enteralwaysCollapsed:顾名思义,这个flag定义的是何时进入(已经消失之后何时再次显示)。假设你定义了一个最小高度(minHeight)同时enteralways也定义了,那么vIEw将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,当滚动到顶部的时候展开完。

exitUntilCollapsed: 同样顾名思义,这个flag时定义何时退出,当你定义了一个minHeight,这个vIEw将在滚动到达这个最小高度的时候消失。

下面来通过flag为exitUntilCollapsed时,来实现Toolbar的折叠显示的效果。这个时候呢,我们把Toolbar直接放在CollapsingToolbarLayout下,先修改appbar_main.xml布局如下:

<?xml version="1.0" enCoding="utf-8"?> <androID.support.design.Widget.AppbarLayout   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="wrap_content"   androID:theme="@style/themeOverlay.AppCompat.Dark.Actionbar">    <androID.support.design.Widget.CollapsingToolbarLayout     androID:layout_wIDth="match_parent"     androID:layout_height="248dp"     app:expandedTitlemarginEnd="10dp"     app:expandedTitlemarginStart="10dp"     app:layout_scrollFlags="scroll|exitUntilCollapsed">      <androID.support.v7.Widget.Toolbar       androID:ID="@+ID/toolbar"       androID:layout_wIDth="match_parent"       androID:layout_height="?attr/actionbarSize"       app:popuptheme="@style/themeOverlay.AppCompat.light"       androID:background="?attr/colorPrimary"       app:layout_collapseMode="pin"/>    </androID.support.design.Widget.CollapsingToolbarLayout>  </androID.support.design.Widget.AppbarLayout> 

效果图:


下面再来看一个更好玩高级的效果,实现滑动的时候差生视觉差的感觉。先看效果图:


先appbar_main.xml的布局如下:

<?xml version="1.0" enCoding="utf-8"?> <androID.support.design.Widget.AppbarLayout   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="wrap_content"   androID:theme="@style/themeOverlay.AppCompat.Dark.Actionbar">    <androID.support.design.Widget.CollapsingToolbarLayout     androID:layout_wIDth="match_parent"     androID:layout_height="248dp"     app:expandedTitlemarginEnd="10dp"     app:expandedTitlemarginStart="10dp"     app:contentScrim="?attr/colorPrimary"     app:layout_scrollFlags="scroll|exitUntilCollapsed">      <ImageVIEw       androID:layout_wIDth="match_parent"       androID:layout_height="match_parent"       androID:scaleType="centerCrop"       app:layout_collapseMode="parallax"       androID:background="@drawable/bg"/>      <androID.support.v7.Widget.Toolbar       androID:ID="@+ID/toolbar"       androID:layout_wIDth="match_parent"       androID:layout_height="?attr/actionbarSize"       app:popuptheme="@style/themeOverlay.AppCompat.light"       app:layout_collapseMode="pin"/>    </androID.support.design.Widget.CollapsingToolbarLayout>  </androID.support.design.Widget.AppbarLayout> 

实现视觉差的属性主要来自于app:layout_collapseMode="parallax",这个flag代表的是视差模式,即在折叠的时候会有视差折叠的效果,而“pin”,固定模式,就是在折叠的最后固定在最顶端。

上面说了那么多,其实这些效果的实现都离不开一个东西,那就是Behavior。CoordinatorLayout的工作原理是搜索定义了CoordinatorLayout Behavior的子vIEw,不管是通过在xml中使用app:layout_behavior标签还是通过在代码中对vIEw类使用@DefaultBehavior修饰符来添加注解。当滚动发生的时候,CoordinatorLayout会尝试触发那些声明了依赖的子vIEw。要自己定义CoordinatorLayoutBehavior,你需要实现layoutDependsOn() 和onDependentVIEwChanged()两个方法。

综上,差不就是CoordinatorLayout 的实现各种效果了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

您可能感兴趣的文章:Android中关于CoordinatorLayout的一些实用布局技巧Android 使用CoordinatorLayout实现滚动标题栏效果的实例Android CoordinatorLayout详解及实例代码Android 5.0中CoordinatorLayout的使用技巧CoordinatorLayout的使用如此简单(Android) 总结

以上是内存溢出为你收集整理的详解android特性之CoordinatorLayout用法探析实例全部内容,希望文章能够帮你解决详解android特性之CoordinatorLayout用法探析实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1142996.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存