appbarlayout 学习总结

控件介绍 (这里在理解之后需要修改 )

  • AppBarLayout继承自LinearLayout,布局方向为垂直方向。所以你可以把它当成垂直布局的LinearLayout来使用。AppBarLayout是在LinearLayou上加了一些材料设计的概念,它可以让你定制当某个可滚动View的滚动手势发生变化时,其内部的子View实现何种动作。
  • 上面提到的某个可滚动View,可以理解为某个ScrollView。当这个ScrollView 发生滚动的时候 我们可以 定义appbarlayout里面的子view的动作
  • 内部的子View通过在布局中加app:layout_scrollFlags设置执行的动作,app:layout_scrollFlags 也可以在代码中通过setScrollFlags(int)设置 可以设置五种动作,下面一一介绍

五种滚动属性介

  • scroll:值设为scroll的View会跟随滚动事件一起发生移动。就是当指定的ScrollView发生滚动时,该View也跟随一起滚动,就好像这个View也是属于这个ScrollView一样。在下面的代码中 toolbar在滚动的时候 会向上滚出屏幕
  • enterAlways:这个flag跟scroll一块使用时,向上滑动时ToolBar移出屏幕,我们向下滑动时Toolbar进入屏幕。上面的图给出的就是scroll|enterAlways这个两个flag的效果。
  • enterAlwaysCollapsed : enterAlways的附加值。这里涉及到appbarlayout 的Child View的高度和最小高度,向下滚动时,Child View先向下滚动最小高度值,然后Scrolling View开始滚动,到达边界时,Child View再向下滚动,直至显示完全。(要设置子view的最小高度)
  • exitUntilCollapsed:这个跟上面的enterAlwaysCollapsed相反;它也涉及到minHeight,当发生向上滚动事件时,AppLayout向上滚动,直到我们设置的minHeight,然后我们的滑动View才开始滚动。就算我们滑动的view完全上滑完毕,我们的AppBarLayout也会一直保留我们设置的minHeight显示在屏幕的上方
  • snap:滑动结束的时候可能会出现 toolbar显示不完全的样子 这个属性让拖把人要么显示完全 要么完全隐藏 这都是在ScrollView滑动停止之后的事情。
  • 需要注意的是 scroll属性是可以单独设置的。但是使用其他属性srcoll属性也必须一起设置
  • 布局文件代码 只是设置的属性不同


        

将子view与ScrollView 联系起来

  • 网上大部分都是下面这种用法 TODO 但是我觉得我见过自定义Behavior的写法,所以应该是可以自己定义的
  • 把ScrollView和AppBarLayout作为CoordinateLayout的子View,然后编写一个Behavior,在这个Behavior里面判断当前的操作是应该让ScrollView时刻保持在AppBarLayout之下(即只要改变AppBarLayout的位置就可以一起滑动),还是应该让ScrollView内部滚动而不让AppBarLayout位置发生变化等等这些需求,都是可以在Behavior里面处理的。你可以去针对你的ScrollView编写Behavior。然而,我们看到我们的AppBarLayout实现的功能比较复杂,如果我们自己去定义这样的效果,代码非常复杂,还要考虑很多方面,好在Android帮我们写好啦,我们直接用就是了,这个ScrollView就是NestedScrollView,请注意,它并没有继承ScrollView,它继承的是FrameLayout,但是它实现的效果把它可以看成是ScrollView。
  • 具体代码如下
//注意外面有一层 CoordinateLayout 作为 NestedScrollView 和 AppBarLayout 的父布局 才可以使用 否则是是没用的


       

    
  • 需要注意的地方
  • 属性:app:layout_behavior="@string/appbar_scrolling_view_behavior",它就是指定Behavior的,appbar_scrolling_view_behavior对应的类的名称是:android.support.design.widget.AppBarLayout$ScrollingViewBehavior

你可能感兴趣的:(appbarlayout 学习总结)