Android Design Support Library之CoordinatorLayout,AppBarLayout
2015-11-16 21:20
459 查看
在上一篇文章(点我)中我们提到了CoordinatorLayout。CoordinatorLayout是这次新添加的一个增强型的FrameLayout。在CoordinatorLayout中,我们可以在FrameLayout的基础上完成很多新的操作。可以说,CoordinatorLayout是support library的重中之重。它从另一层面去控制子view之间触摸事件的布局,Design library中的很多控件都利用了它。从上一篇文章中我们就实现了将FloatingActionButton作为一个子View添加进CoordinatorLayout并且将CoordinatorLayout传递给 Snackbar.make(),在3.0及其以上的设备上,Snackbar不会显示在悬浮按钮的上面,而是FloatingActionButton利用CoordinatorLayout提供的回调方法,在Snackbar以动画效果进入的时候自动向上移动让出位置,并且在Snackbar动画地消失的时候回到原来的位置,不需要额外的代码。
下面我们来看看怎么将toolbar滑动出屏幕的实现:
先看布局文件:
这里需要一个可以滚动的组件,例如RecyclerView、 NestedScrollView( 这里需要注意的是,目前只支持RecyclerView、 NestedScrollView,如果你用一个ScrollView,是没有效果的 )。如果:
1、给这个可滚动组件设置了layout_behavior
2、给另一个控件设置了layout_scrollFlags
那么,当设置了layout_behavior的控件滑动时,就会触发设置了layout_scrollFlags的控件发生状态的改变。
从上边可以看出,如果想让toolbar滑出屏幕,就得先给可滚动的组件(我用的是RecyclerView)设置layout_behavior,即:app:layout_behavior=”@string/appbar_scrolling_view_behavior” 。然后在给toolbar设置layout_scrollFlags,如果是要滑出屏幕需要设置app:layout_scrollFlags=”scroll|enterAlways”。
设置的layout_scrollFlags有如下几种选项:
scroll: 所有想滚动出屏幕的view都需要设置这个flag- 没有设置这个flag的view将被固定在屏幕顶部。
enterAlways: 这个flag让任意向下的滚动都会导致该view变为可见,启用快速“返回模式”。
enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时,你的视图只能已最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
需要注意的是,后面两种模式基本只有在CollapsingToolbarLayout才有用,而前面两种模式基本是需要一起使用的,也就是说,这些flag的使用场景,基本已经固定了。我们使用的就是app:layout_scrollFlags=”scroll|enterAlways”。
这里还必须强调一下所有使用scrollFlags的view都必须定义在没有使用scroll flag的view的前面,这样才能确保所有的view从顶部退出,留下固定的元素。
项目地址:github
下面我们来看看怎么将toolbar滑动出屏幕的实现:
先看布局文件:
<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/cl_root" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/rcv_recyclerview" android:layout_width="match_parent" android:layout_height="wrap_content" app:layout_behavior="@string/appbar_scrolling_view_behavior"> </android.support.v7.widget.RecyclerView> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" android:background="@color/colorPrimary" android:id="@+id/toolbar" app:layout_scrollFlags="scroll|enterAlways"> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|bottom" android:layout_marginBottom="8dp" android:layout_marginRight="8dp" android:src="@mipmap/ic_plus"/> </android.support.design.widget.CoordinatorLayout>
这里需要一个可以滚动的组件,例如RecyclerView、 NestedScrollView( 这里需要注意的是,目前只支持RecyclerView、 NestedScrollView,如果你用一个ScrollView,是没有效果的 )。如果:
1、给这个可滚动组件设置了layout_behavior
2、给另一个控件设置了layout_scrollFlags
那么,当设置了layout_behavior的控件滑动时,就会触发设置了layout_scrollFlags的控件发生状态的改变。
从上边可以看出,如果想让toolbar滑出屏幕,就得先给可滚动的组件(我用的是RecyclerView)设置layout_behavior,即:app:layout_behavior=”@string/appbar_scrolling_view_behavior” 。然后在给toolbar设置layout_scrollFlags,如果是要滑出屏幕需要设置app:layout_scrollFlags=”scroll|enterAlways”。
设置的layout_scrollFlags有如下几种选项:
scroll: 所有想滚动出屏幕的view都需要设置这个flag- 没有设置这个flag的view将被固定在屏幕顶部。
enterAlways: 这个flag让任意向下的滚动都会导致该view变为可见,启用快速“返回模式”。
enterAlwaysCollapsed: 当你的视图已经设置minHeight属性又使用此标志时,你的视图只能已最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
exitUntilCollapsed: this flag causes the view to scroll off until it is ‘collapsed’ (its minHeight) before exiting。
需要注意的是,后面两种模式基本只有在CollapsingToolbarLayout才有用,而前面两种模式基本是需要一起使用的,也就是说,这些flag的使用场景,基本已经固定了。我们使用的就是app:layout_scrollFlags=”scroll|enterAlways”。
这里还必须强调一下所有使用scrollFlags的view都必须定义在没有使用scroll flag的view的前面,这样才能确保所有的view从顶部退出,留下固定的元素。
项目地址:github
相关文章推荐
- Xamarin.Android广播接收器
- Android 一些基本组件的使用
- Unity中用到的C#补充(六)- Delegate委托
- Cocos2D:塔防游戏制作之旅(四)
- Cocos2D:塔防游戏制作之旅(四)
- Cocos2D:塔防游戏制作之旅(四)
- Android Studio 配置 Gradle 直接运行打包(relase)程序 图文详解
- android带返回按钮的自定义标题栏布局文件详解
- 【一种基于亮度映射的HDR算法】论文Adaptive Logarithmic Mapping For Displaying High Contrast Scenes
- Unity中C# 文件本地读取,本地保存等实例
- iOS开发:使用Block在两个界面之间传值
- iOS实现一个颜色渐变的弧形进度条
- Object Overlay on Video
- Android 实现LazyFragment
- ios9的新特性
- 目前和接下来的android
- Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画
- Cocos2d-x 3.8.1+Cocos Studio 2.3.2捉虫记之控制场景文件中的骨骼动画
- 浅谈swift中的那些类,结构以及初始化的操作
- Object-C之Protocol协议解析