CoordinatorLayout折叠悬浮完美实现,解决Toolbar的title布局中

时间:2024-03-15 08:15:03

简单说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会停留在屏幕顶部。
CollapsingToolbarLayout
app:contentScrim Toolbar显示时的背景色
app:scrimVisibleHeightTrigger 滚动到多高开始变色
app:collapsedTitleTextAppearance 折叠式显示的文本样式
app:expandedTitleTextAppearance 展开时显示的文本样式
app:toolbarId 关联的Toolbar的ID
android.support.v7.widget.Toolbar
layout_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显示有问题,一直不水平居中:
CoordinatorLayout折叠悬浮完美实现,解决Toolbar的title布局中
网上都说什么在Toolbar里面放一个TextView,是可以解决,但是这个title的缩放效果就没有了,然后我发现要在activity的onCreate中调用setSupportActionBar(toolBar);就可以了:
CoordinatorLayout折叠悬浮完美实现,解决Toolbar的title布局中

下集预告:沉浸式状态栏,包括折叠布局的顶部显示到状态栏