CoordinatorLayout和AppBarLayout

一.什么是CoordinatorLayout

CoordinatorLayout是Android官方在Design包提供的控件

CoordinatorLayout:协调者布局,用来组织内部的子view之间的协作的一个view。继承自ViewGroup。作为Material Design风格的重要组件,CoordinatorLayout(协调布局)协调多种组件的联动,实现各种复杂的效果,在实际项目中扮演着越来越重要的角色。

CoordinatorLayout是一个加强版的FrameLayout,本质是一个ViewGroup
主要有两个用途:

1.应用的顶层布局管理器,作为界面其他控件的父容器
2.用作相互之间有特定交互行为的控件的父容器
通过为CoordinatorLayout的子View指定不同的Behavior(默认的Behavior或自定义的Behavior),就可以实现它们之间许多复杂的交互行为,例如侧滑,移动,滑动等。

CoordinatorLayout存在的意义:

通过自定义Children的Behaviors(行为)来实现控件之间的交互动画效果。而像FloatingActionButton和AppBarLayout都有自己的DefaultBehavior(默认行为),所以,这两个控件更适合与CoordinatorLayout联合使用。当然,我们在使用CoordinatorLayout时,也可以自己动手编写Behavior来实现一些复杂的交互效果

二.如何使用CoordinatorLayout

添加依赖,需要添加design的依赖:

implementation 'com.android.support:design:27.1.1'

三.什么是AppBarLayout

AppBarLayout是一个垂直的 LinearLayout, 它实现了很多在material designs设计中提出的概念性交互功能,也就是【滚动手势】。

四.如何使用AppBarLayout

添加design依赖
我们可以通过给它的子View进行setScrollFlags(int)或者直接在xml中增加属性app:layout_scrollFlags来设置它子View的滚动行为。
需要注意的是,AppBarLayout需要配合CoordinatorLayout进行使用,如果只是放到普通的ViewGroup中使用的话将无法实现它的效果。


app:layout_scrollFlags介绍:

1. scroll:

View 伴随着滚动事件而滚出或滚进屏幕。注意两点:第一点,如果使用了其他值,必定要使用这个值才能起作用;第二点:如果在这个View前面的任何其他View没有设置这个值,那么这个 View的设置将失去作用。

2 enterAlways

快速返回模式。其实就是向下滚动时Scrolling View和View(ToolBar)之间的滚动优先级问题。对比scroll和scroll | enterAlways设置,发生向下滚动事件时,前者优先滚动Scrolling View,后者优先滚动View,当优先滚动的一方已经全部滚进屏幕之后,另一方才开始滚动。

app:layout_scrollFlags="scroll|enterAlways"

3 enterAlwaysCollapsed

enterAlways的附加值。这里涉及到View(ToolBar)的高度和最小高度,向下滚动时,View先向下滚动最小高度值,然后Scrolling View开始滚动,到达边界时,View再向下滚动,直至显示完全。

app:layout_scrollFlags="scroll|enterAlways|enterAlwaysCollapsed"

4 exitUntilCollapsed

这里也涉及到最小高度。发生向上滚动事件时,View向上滚动退出直至最小高度,然后Scrolling View开始滚动。也就是,Child View不会完全退出屏幕。

app:layout_scrollFlags="scroll|exitUntilCollapsed"

5 snap

简单理解,就是Child View滚动比例的一个吸附效果。也就是说,Child View不会存在局部显示的情况,滚动Child View的部分高度,当我们松开手指时,Child View要么向上全部滚出屏幕,要么向下全部滚进屏幕,有点类似ViewPager的左右滑动。

Behavior

Behavior这个名词看着陌生,但事实上我们经常简单,如:

app:layout_behavior="@string/appbar_scrolling_view_behavior"

这个一般是出现在使用Android Stuido创建Activty的时候自动创建的,他的作用是让使用这个属性的View在appbar下面滚动。而Behavior主要的使用方式其实是通过反射来实现的,我们在layout_behavior中并没有直接进行引用,而是写了包名+类名,所以Behavior是不能够被混淆的。

使用addOnOffsetChangedListener方法为AppBarLayout添加滑动偏移监听事件,
verticalOffset 参数值表示偏移值,可用appBarLayout.getTotalScrollRange()方法获取最大偏移值。

appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
    @Override
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
          // TODO
    }
});

你可能感兴趣的:(CoordinatorLayout和AppBarLayout)