AppBarLayout的理解

  • 介绍
    AppBarLayout实际是一个垂直方向的LinearLayout,在它的内部做了很多滚动
    事件的封装,并应用了一些Material Design的设计理念。

  • 关键
    (1)CoordinatorLayout作为AppBarLayout的直接父布局;
    (2)CoordinatorLayout里面包含有两个子控件,一个是AppBarLayout,一个是可以
    滑动的控件(CoordinatorLayout是一个加强版FrameLayout,目前支持的滑动
    控件有RecyclerView 和 NestedScrollView)
    (3)外面直接子view要:

app:layout_behavior="@string/appbar_scrolling_view_behavior"

这样当滑动控件滑动时候,就会将滚动事件通知给AppBarLayout,通过关键属性:behavior
(4)AppActionBar要去处理接受到的滚动事件,它内部的子控件可以通过

app:layout_scrollFlags:
第一种:scroll:值设为scroll的View会跟随滚动事件一起发生移动。相当于这个子view和下面滑动一体
最终实现向上滚动并且实现隐藏。
第二种:enterAlways:值设为enterAlways的View,当ScrollView往下滚动时,该View会直接往下滚动。最终效果是向下滚动并且显示。
         而不用考虑ScrollView是否在滚动。
第三种:exitUntilCollapsed:值设为exitUntilCollapsed的View,当这个View
         要往上逐渐“消逝”时,会一直往上滑动,直到剩下的的高度达到它的最
         小高度后,再响应ScrollView的内部滑动事件。要手动设置其最小高度
第四种:enterAlwaysCollapsed:是enterAlways的附加选项,一般跟enterAlways
         一起使用,它是指,View在往下“出现”的时候,首先是enterAlways效果,
          当View的高度达到最小高度时
         View就暂时不去往下滚动,直到ScrollView滑动到顶部不再滑动时
         View再继续往下滑动,直到滑到View的顶部结束。
也需要设置最小的高度
第五种:snap:表示子view还没有完全隐藏或显示时候,会根据当前滚动的距离,
自动选择还是隐藏还是显示。
  • 提醒
    (1)由于常常是tablayout+viewpager来使用,这里也做一下介绍,前面提到需要用CoordinatorLayout包裹两个
    子控件,将tablayout放在appbarlayout中,将ViewPager放在下面,但是ViewPager不具有滑动属性,因此,需要viewpager里面的内容是可滑动的比如RecyclerView才可以,下面是关键代码


    

        
            
            
            
            
        

                
                
    

//还有一点需要提醒的是,这里的viewpager没有上下滑动的属性,这里之所以可以用,使其的内容区域是可 滑动的RecyclerView,这里RecyclerView最好要配置了Adapter,但是可以不显示内容,也是可以的

AppBarLayout的理解_第1张图片
device-2017-03-17-124036_20170317124158.gif

你可能感兴趣的:(AppBarLayout的理解)