CoordinatorLayout

313 阅读1分钟

CoordinatorLayout是FrameLayout的升级版,它可以处理子View间的关系,实现更好的UI效果。

ScrollView不能和CoordinatorLayout一起使用,应该使用NestedScrollView并为其指定app:layout_behavior

AppBarLayout

<android.support.design.widget.CoordinatorLayout
        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">
     
     <! -- Your Scrollable View -->
    <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
   	  <android.support.v7.widget.Toolbar
            	app:layout_scrollFlags="scroll|enterAlways">

          <android.support.design.widget.TabLayout
            	app:layout_scrollFlags="scroll|enterAlways">
     </android.support.design.widget.AppBarLayout>
     
</android.support.design.widget.CoordinatorLayout>
  1. 给RecyclerView指定app:layout_behavior="@string/appbar_scrolling_view_behavior"
  2. AppBarLayout的子View如果app:layout_scrollFlags="scroll",那么该View就会随着RecyclerView的滑动而滑出屏幕。反则,固定在屏幕顶部。enterAlways指定View的滑动行为。
  3. 指定app:layout_scrollFlags的值为scroll的View应该写在不能滑出屏幕的View的前面。

CollapsingToolbarLayout

<android.support.design.widget.AppBarLayout
        android:layout_height="192dp"
        android:layout_width="match_parent">
    <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">
        <android.support.v7.widget.Toolbar
                android:layout_height="?attr/actionBarSize"
                android:layout_width="match_parent"
                app:layout_collapseMode="pin"/>
        </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
  1. CollapsingToolbarLayout是用来控制子View的压缩模式,通过属性app:layout_collapseMode="parallax"
  2. 给CollapsingToolbarLayout添加app:contentScrim="?attr/colorPrimary"达到更好的UI效果。
  3. 要设置app bar的标题时,应该调用CollapsingToolbarLayout的setTitle方法,而不是Toolbar。

自定义Behaviors

CoordinatorLayout通过Behavior来控制子View的行为。Behavior的指定有两种方式,一种是在xml文件中指定app:layout_behavior="com.example.app.YourView$Behavior",另一种是在代码中给子View的类加上注解CoordinatorLayout.DefaultBehavior(YourView.Behavior.class)。Behavior接口有两个方法,layoutDependsOnonDependentViewChangedlayoutDependsOn声明子View间的依赖关系。当有事件被触发时,CoordinatorLayout就会根据子View的依赖关系,调用相关的onDependentViewChanged方法达到控制

参考: http://android-developers.blogspot.com/2015/05/android-design-support-library.html