一、CoordinatorLayout (协调者布局)
CoordinatorLayout is a super-powered FrameLayout。
CoordinatorLayout 适用于两种案例:
1.作为顶层布局;
2.作为一个容器调度协调子布局
通过为子view 指定Behaviors属性,CoordinatorLayout提供许多不同的交互,控件之间也可进行交换(控件需在同一父布局内)。CoordinatorLayout提供默认动画(DefaultBehavior),可以为控件直接指定默认动画。
Behaviors 可以用来实现各种各样的交互和布局修改。可以定制自己的动画效果。
CoordinarotLayout 子控件可能会有一一个锚点(anchor app:layout_anchor="@id/my_appbar")。这个子控件的ID需和其他子控件ID一直,但他不能是控件本身或其子控件。它可以用来放置浮动控件相对与其他任意布局
例:
<android.support.design.widget.FloatingActionButton
android:layout_height="wrap_content"
android:layout_width="wrap_content"
app:layout_anchor="@id/my_appbar"
app:layout_anchorGravity="bottom|right|end"
android:src="@android :drawable/ic_input_add"
android:layout_margin="@dimen/fab_margin"
android:clickable="true"/>
二、CollaspingToolbarLayout (可折叠工具栏布局)
继承FrameLayout
它是实现了可折叠工具栏的包装类,用作AppBarLayout的直接子类包含以下几个特性:
1.可折叠标题(Collapsing title)
该布局在展开的情况下标题显示字体较大,在折叠的情况下显示较小。通过setTitle(CharSequence)(注意不是在Toolbar 上setTitle) 并通过设置collapsedTextApperance和expandedTextApperance 属性进行标题变化显示。
2.内容渐变效果(Content scrim)
通过设置setContextScrim(Drawable)当界面滚动到某一阈值,实现全局内容渐变效果。
3.状态栏渐变效果(Status ba scrim)
通过设置setStatusBarScrim(Drawable)当界面滚动到某一阈值,实现状态栏的渐变效果,仅在SDK22(LOLLIPOP)下可用,且需设置fit system windows
4.子控件视差滚动效果(Parallax scrolling children)
通过设置子控件的app:layout_collapseMode="parallax"属性("pin", "parallax", "none")来控制视差显示效果。通过setParallaxMultiplier(float)来设置视差倍数效果
5.固定子控件的位置(Pinned position children)
通过设置子控件app:layout_collapseMode="pin" 属性,子控件可以设置为全局固定。可用于实现布局滚动,折叠效果且要求固定Toolbar时
三、AppBarLayout
AppBarLayout is a vertiacl LinearLayout (AppBarLayout是一个垂直布局的LinearLayout);
AppBarLayout是一个垂直布局的LinearLayout,它实现了Material Designs 状态栏的概念,也就是说手势滚动。
子控件可以通过setScrollFlags(int)设置用户需要的滚动行为,也可以在相应的layout 布局文件中使用 app:layout_scrollFlags。
该布局依赖CoordinatorLayout,作为直接子布局使用。如果用于其他布局,会导致大部分方法无法使用。
为了获取到界面滚动,AppBarLayout还需要一个并行的布局。需要为并行布局绑定AppBarLayout.ScrollingViewBehavior类,这意味着你需要为你滚动的界面设置一个类来代替AppBarLayout.ScrollingViewBehavior。(app:layout_behavior="@string/appbar_scrolling_view_behavior"),需指定该类的完整类名。