Android Design Support Library之CoordinatorLayout,AppBarLayout

  在上一篇文章(点我)中我们提到了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滑动出屏幕的实现:
  先看布局文件:
 

<?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从顶部退出,留下固定的元素。
  Android Design Support Library之CoordinatorLayout,AppBarLayout_第1张图片

  
  项目地址:github

你可能感兴趣的:(android,设计,布局)