【Support Design】CoordinatorLayout 初探索

属于android.support.design.widget包中的一个新组件,使AppBarLayout可以随着用户的滑动而改变高度,并且可以在初始位置将AppBarLayout背景设置为一张Image,在滑动到一定时间点时切换到Toolbar的样式
示例图片
先看Google官方的Sample源码

<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:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

       <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/text_margin"
            android:text="@string/large_text" />
    </android.support.v4.widget.NestedScrollView>

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|end" />

</android.support.design.widget.CoordinatorLayout>

我们可以看到,在根局部使用了CoordinatorLayout,打开源码

public class CoordinatorLayout extends ViewGroup implements NestedScrollingParent

CoordinatorLayout继承自ViewGroup。所有定义的子部件位置默认生成在左上角。布局上只能通过marginpadding等基本属性设置子部件位置

关于app:layout_behavior

NestedScrollView需设置
app:layout_behaviorandroid.support.design.widget.AppBarLayout$ScrollingViewBehavior,可以引用@string/appbar_scrolling_view_behavior,使NestedScrollView自适应AppBarLayout的高度变化

仅NestedScrollView可以造成滑动时AppBarLayout高度改变,ScrollView不可以

关于fitSystemWindows

举例:

AppBarLayout.getHeight() == 180p
Toolbar.getHeight() == ?attr/actionBarSize

在API21 的Style文件中的设置

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
  • CoordinatorLayout中的fitsSystemWindows不设置或设置为false,会让StatusBar变为默认状态,即transparent

  • AppBarLayoutCollaspingToolbarLayout中的fitsSystemWindows不设置或设置为false,会让StatusBar在滑动前显示为ColorPrimaryDark,滑动后显示ColorPrimary

    若不存在CollaspingToolbarLayout时给AppBarLayout设置fitsSystemWindows = true会导致StatusBar失去高度

  • Toolbar中无影响

CoordinatorLayoutAppBarLayoutCollaspingToolbarLayout中都设置fitsSystemWindows = true后:

在滑动前,height = AppBarLayout.getHeight()时,StatusBar的颜色和CollaspingToolbarLayout背景色相同(即图片会延伸到StatusBar,但状态栏图标不覆盖)

滑动后,height = Toolbar.getHeight()时,StatusBar颜色恢复到ColorPrimaryDark

关于app:layout_scrollFlags

仅当第一个参数设置为Scroll时会造成滑动时高度的改变,滑动时CollaspingToolbarLayout在过程某时背景变更为app:contentScrim

  • Scroll|exitUntilCollapsed

    ​ 内容上滑时,AppBarLayout的高度改变,改变到与Toolbar的高度相同为止,过程线性变化

  • Scroll|enterAlways

    ​ 内容上滑时,AppBarLayout的高度改变,改变到0为止,过程线性变化,更平滑

  • Scroll|enterAlwaysCollasped

    ​ 内容上滑时,AppBarLayout的高度改变,改变到0为止,过程线性变化

  • Scroll|snap

    ​ 内容上滑时,AppBarLayout的高度改变,上滑停止时,判断距离顶端和低端的高度,变化为极大或极小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值