简单说CoordinatorLayout可以实现炫酷的顶部布局到ActionBar的折叠效果,经大量实验总结,做一个笔记。
1、属性介绍
AppBarLayout
它的直接子布局都有一个layout_scrollFlags属性,有五个值(举例上面是CoordinatorLayout布局内置Toolbar,下面是列表):
1、scroll
可以滚动,其他牵扯到滚动的属性都依赖这个属性,结合使用才有用。
2、app:layout_scrollFlags="scroll|enterAlways"
往上滚动时,Toolbar逐渐显示,但是会跟随视图滚出屏幕;往下滚动时,列表滚到顶部,Toolbar才会显示。
3、app:layout_scrollFlags="scroll|enterAlwaysCollapsed"
往上滚动时,Toolbar逐渐显示,但是会跟随视图滚出屏幕;往下滚动时,Toolbar立刻显示,不用等列表滚到顶部。
4、app:layout_scrollFlags="scroll|snap"
Toolbar在屏幕上显示大于一半会完全弹出,小于一半会完全弹入,就是显示与不显示两个状态,不存在显示一部分。
5、app:layout_scrollFlags="scroll|exitUntilCollapsed"
在2的基础上,Toolbar会停留在屏幕顶部。
CollapsingToolbarLayoutapp:contentScrim
Toolbar显示时的背景色app:scrimVisibleHeightTrigger
滚动到多高开始变色app:collapsedTitleTextAppearance
折叠式显示的文本样式app:expandedTitleTextAppearance
展开时显示的文本样式app:toolbarId
关联的Toolbar的ID
android.support.v7.widget.Toolbarlayout_collapseMode
折叠模式,pin是随着往上滚动,parallax时要结合layout_collapseParallaxMultiplier=“0.5”,上下都往中间收缩。app:title
Toolbar显示文本
app:navigationIcon 导航图标
2、实现折叠效果
我在Toolbar上面放了一个ImageVIew,当然也可以是一个ViewGroup。
布局文件:
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:theme="@style/AppTheme.AppBarOverlay"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsingToolbarLayout"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:contentScrim="@color/red"
app:scrimVisibleHeightTrigger="150dp"
app:collapsedTitleTextAppearance="@style/collapseditleTextAppearance"
app:expandedTitleTextAppearance="@style/expandedTitleTextAppearance"
app:toolbarId="@+id/toolBar"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/ivTop"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.5"
android:src="@mipmap/img"
android:adjustViewBounds="true"
android:scaleType="fitXY" />
<android.support.v7.widget.Toolbar
android:id="@+id/toolBar"
app:layout_collapseMode="pin"
app:title="ToolBar Title"
app:popupTheme="@style/AppTheme.PopupOverlay"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@color/white"
app:tabIndicatorColor="#ff5000"
app:tabIndicatorHeight="2dp"
app:tabMode="fixed"
app:tabSelectedTextColor="#ff5000"
app:tabTextColor="@color/black">
</android.support.design.widget.TabLayout>
<View
android:layout_width="match_parent"
android:layout_height="0.5dp"
android:background="#aa000000" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
刚开始Toolbar的title显示有问题,一直不水平居中:
网上都说什么在Toolbar里面放一个TextView,是可以解决,但是这个title的缩放效果就没有了,然后我发现要在activity的onCreate中调用setSupportActionBar(toolBar);
就可以了: