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>
- 给RecyclerView指定
app:layout_behavior="@string/appbar_scrolling_view_behavior"
- AppBarLayout的子View如果
app:layout_scrollFlags="scroll"
,那么该View就会随着RecyclerView的滑动而滑出屏幕。反则,固定在屏幕顶部。enterAlways
指定View的滑动行为。 - 指定
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>
- CollapsingToolbarLayout是用来控制子View的压缩模式,通过属性
app:layout_collapseMode="parallax"
。 - 给CollapsingToolbarLayout添加
app:contentScrim="?attr/colorPrimary"
达到更好的UI效果。 - 要设置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接口有两个方法,layoutDependsOn
和onDependentViewChanged
。layoutDependsOn
声明子View间的依赖关系。当有事件被触发时,CoordinatorLayout就会根据子View的依赖关系,调用相关的onDependentViewChanged
方法达到控制
参考: http://android-developers.blogspot.com/2015/05/android-design-support-library.html