Android5.0+ CollapsingToolbarLayout使用详解
collapsingtoolbarlayout作用是提供了一个可以折叠的toolbar,它继承至framelayout,给它设置layout_scrollflags,它可以控制包含在collapsingtoolbarlayout中的控件(如:imageview、toolbar)在响应layout_behavior事件时作出相应的scrollflags滚动事件(移除屏幕或固定在屏幕顶端)。
使用collapsingtoolbarlayout:
<android.support.design.widget.appbarlayout android:layout_width="match_parent" android:layout_height="256dp" android:fitssystemwindows="true"> <android.support.design.widget.collapsingtoolbarlayout android:id="@+id/collapsing_toolbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" app:contentscrim="#30469b" app:expandedtitlemarginstart="48dp" app:layout_scrollflags="scroll|exituntilcollapsed"> <imageview android:layout_width="match_parent" android:layout_height="match_parent" android:scaletype="centercrop" android:src="@mipmap/bg" app:layout_collapsemode="parallax" app:layout_collapseparallaxmultiplier="0.7" /> <android.support.v7.widget.toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionbarsize" app:layout_collapsemode="pin" /> </android.support.design.widget.collapsingtoolbarlayout> </android.support.design.widget.appbarlayout>
我们在collapsingtoolbarlayout中设置了一个imageview和一个toolbar。并把这个collapsingtoolbarlayout放到appbarlayout中作为一个整体。
1、在collapsingtoolbarlayout中:
我们设置了layout_scrollflags:关于它的值我这里再说一下:
scroll - 想滚动就必须设置这个。
enteralways - 实现quick return效果, 当向下移动时,立即显示view(比如toolbar)。
exituntilcollapsed - 向上滚动时收缩view,但可以固定toolbar一直在上面。
enteralwayscollapsed - 当你的view已经设置minheight属性又使用此标志时,你的view只能以最小高度进入,只有当滚动视图到达顶部时才扩大到完整高度。
其中还设置了一些属性,简要说明一下:
contentscrim - 设置当完全collapsingtoolbarlayout折叠(收缩)后的背景颜色。
expandedtitlemarginstart - 设置扩张时候(还没有收缩时)title向左填充的距离。
没扩张时候如图:
2、在imageview控件中:
我们设置了:
layout_collapsemode (折叠模式) - 有两个值:
pin - 设置为这个模式时,当collapsingtoolbarlayout完全收缩后,toolbar还可以保留在屏幕上。
parallax - 设置为这个模式时,在内容滚动时,collapsingtoolbarlayout中的view(比如imageview)也可以同时滚动,实现视差滚动效果,通常和layout_collapseparallaxmultiplier(设置视差因子)搭配使用。
layout_collapseparallaxmultiplier(视差因子) - 设置视差滚动因子,值为:0~1。
3、在toolbar控件中:
我们设置了layout_collapsemode(折叠模式):为pin。
综上分析:当设置了layout_behavior的控件响应起了collapsingtoolbarlayout中的layout_scrollflags事件时,imageview会有视差效果的向上滚动移除屏幕,当开始折叠时collapsingtoolbarlayout的背景色(也就是toolbar的背景色)就会变为我们设置好的背景色,toolbar也一直会固定在最顶端。
效果如图:
【注】:使用collapsingtoolbarlayout时必须把title设置到collapsingtoolbarlayout上,设置到toolbar上不会显示。即:
mcollapsingtoolbarlayout.settitle(" ");
该变title的字体颜色:
扩张时候的title颜色:mcollapsingtoolbarlayout.setexpandedtitlecolor();
收缩后在toolbar上显示时的title的颜色:mcollapsingtoolbarlayout.setcollapsedtitletextcolor();
这个颜色的过度变化其实collapsingtoolbarlayout已经帮我们做好,它会自动的过度,比如我们把收缩后的title颜色设为绿色,效果如图:
没录好,反正效果出来了。
接下来看看代码怎么实现吧:
布局文件:
<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" tools:context=".mainactivity"> <android.support.design.widget.appbarlayout android:layout_width="match_parent" android:layout_height="256dp" android:fitssystemwindows="true"> <android.support.design.widget.collapsingtoolbarlayout android:id="@+id/collapsing_toolbar_layout" android:layout_width="match_parent" android:layout_height="match_parent" app:contentscrim="#30469b" app:expandedtitlemarginstart="48dp" app:layout_scrollflags="scroll|exituntilcollapsed"> <imageview android:layout_width="match_parent" android:layout_height="match_parent" android:scaletype="centercrop" android:src="@mipmap/bg" app:layout_collapsemode="parallax" app:layout_collapseparallaxmultiplier="0.7" /> <android.support.v7.widget.toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionbarsize" app:layout_collapsemode="pin" /> </android.support.design.widget.collapsingtoolbarlayout> </android.support.design.widget.appbarlayout> <linearlayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <android.support.v7.widget.recyclerview android:id="@+id/recyclerview" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="none" /> </linearlayout> </android.support.design.widget.coordinatorlayout>
代码文件:
toolbar mtoolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(mtoolbar); getsupportactionbar().setdisplayhomeasupenabled(true); mtoolbar.setnavigationonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { onbackpressed(); } }); //使用collapsingtoolbarlayout必须把title设置到collapsingtoolbarlayout上,设置到toolbar上则不会显示 collapsingtoolbarlayout mcollapsingtoolbarlayout = (collapsingtoolbarlayout) findviewbyid(r.id.collapsing_toolbar_layout); mcollapsingtoolbarlayout.settitle("collapsingtoolbarlayout"); //通过collapsingtoolbarlayout修改字体颜色 mcollapsingtoolbarlayout.setexpandedtitlecolor(color.white);//设置还没收缩时状态下字体颜色 mcollapsingtoolbarlayout.setcollapsedtitletextcolor(color.green);//设置收缩后toolbar上字体的颜色
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: 深入理解Java之HashMap源码剖析