美文网首页
AppBarLayout 基础总结

AppBarLayout 基础总结

作者: 逗比喵喵 | 来源:发表于2016-12-03 15:37 被阅读0次

    学习 详细分析AppBarLayout的五种ScrollFlags 的总结笔记.

    AppBarLayout 是用于与导航栏(Toolbar), 顶部标签栏(TabLayout一起使用, 来达到 MD 风格中 App Bar 的一些滚动交互设计效果.

    • AppBarLayout 继承 LinearLayout, 并增加了一些滑动特性来实现交互动画效果
    • 严重依赖于协调者布局 CoordinatorLayout. 如果将它放置在其它的 ViewGroup 中, 这些滑动特性将不起作用.

    滑动行为 Scrolling Behavior

    定义在 AppBarLayout 中的子 View 需要明确设置各自的滑动行为:

    • 在代码中使用 setScrollFlags(int) 方法
    • 在布局中使用 app:layout_scrollFlags 属性

    滑动行为的参数取值是系统定义好的五个常量, 位 AppBarLayout.LayoutParams 类中.

    • SCROLL_FLAG_SCROLL (布局中为 scroll)
    • SCROLL_FLAG_EXIT_UNTIL_COLLAPSED (布局中为 exitUntilCollapsed)
    • SCROLL_FLAG_ENTER_ALWAYS (布局中为 enterAlways)
    • SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED (布局中为 enterAlwaysCollapsed)
    • SCROLL_FLAG_SNAP (布局中为 snap)
    // 在代码中
    Toolbar toolbar = ... // AppBarLayout 里的 Toolbar
    AppBarLayout.LayoutParams params = 
        (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
    params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | 
        AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
    
    // 在 XML 中
    app:layout_scrollFlags="scroll|snap"
    

    SCROLL

    子 View 伴随着滚动事件而滚出或滚进屏幕.

    注意两点:

    • 如果使用了其他值, 必定要使用这个值才能起作用
    • 如果在这个子 View 前面的任何其他子 View 没有设置这个值, 那么这个子 View 的设置将失去作用

    ENTER_ALWAYS

    本质是设置向下滚动时 Scrolling View 和子 View之间的滚动优先级.

    对比:

    • scroll 优先滚动 Scrolling View
    • scroll | enterAlways 优先滚动子 View, 当优先滚动的一方已经全部滚进屏幕之后, 另一方才开始滚动.

    ENTER_ALWAYS_COLLAPSED

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

    ...
    android:layout_height="200dp"
    android:minHeight="56dp"
    ...
    app:layout_scrollFlags="scroll | enterAlways | enterAlwaysCollapsed"
    ...
    

    EXIT_UNTIL_COLLAPSED

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

    SNAP

    子 View 不会存在局部显示的情况,滚动子 View 的部分高度,当我们松开手指时, 子 View 要么向上全部滚出屏幕, 要么向下全部滚进屏幕.

    ...
    android:layout_height="200dp"
    ...
    app:layout_scrollFlags="scroll|snap"
    ...
    

    相关文章

      网友评论

          本文标题:AppBarLayout 基础总结

          本文链接:https://www.haomeiwen.com/subject/svrcmttx.html