CoordinatorLayout AppbarLayout CollapsingToolbarLayout 实现顶部栏

来源:互联网 发布:易语言炫舞辅助源码 编辑:程序博客网 时间:2024/05/17 04:30

这篇博客最垃圾的地方是没有代码示例,将来有空补上吧

这里要讲的控件都是 design 库的,要使用 design 库的控件,layout 必须使用 AppCompat 的主题,但是 Activity 可以不使用 AppCompatActivity 而是直接使用 Activity

Coordinator 的意思是【协调者】,这个控件就是用来协调它所包含的其它控件之间的动作的
CoordinatorLayout 其实是一种更加高级的framelayout,和 framelayout 相同的是,它的子 view 也是一层一层往上叠加

child 的行为

Behavior、Child 与 Dependency 的概念

CoordinatorLayout 的使用核心是 Behavior,Behavior 就是执行你定制的动作
在讲 Behavior 之前必须先理解两个概念:Child 和 Dependency
Child 是CoordinatorLayout 的子View;其实 Child 是指要执行动作的 CoordinatorLayout 的子 View,简单的说就是带有 behavior 属性的子 view
Dependency 是指 Child 依赖的 View,如果 Dependency 这个 View 发生了变化,那么 Child 这个 View 就要相应发生变化
发生变化是具体发生什么变化呢?这里就要引入 Behavior,Child 发生变化的具体执行的代码都是放在Behavior这个类里面

使用行为

这个行为属性只有 CoordinatorLayout 的直接子 view 能设置,间接子 view 就不行
很奇怪的一点是 android studio 对该属性(app:layout_behavior)没有代码补全,不知道为什么

定义一个继承CoordinatorLayout.Behavior的类,就可以来定义一种行为了
有一些控件包含一个继承自CoordinatorLayout.Behavior的子类,来提供一些默认的行为
当该控件位置变化时,指定该控件的 behavior 子类的控件也会随之变化
目前我只需要使用这些默认的行为,至于自定义行为,以后再说

自定义行为详见——CoordinatorLayout的使用如此简单

AppbarLayout

  • 玩转AppBarLayout,更酷炫的顶部栏
  • CoordinatorLayout布局的使用方式

AppbarLayout 可以设置它的子 view 的滚动方式,当它和 CoordinatorLayout、以及一个可滚动的 view 一起使用时,可以做到,当可滚动的 view 滚动时,AppbarLayout 的子 view 做出相应的动作。关于可滚动的 view,这里使用一个 NestedScrollView 来举例吧

整个逻辑应该是这样的 NestedScrollView 设置 behavior,它是 child,那 AppbarLayout 就是 Dependency。当 NestedScrollView 要滚动时,AppbarLayout 让其子 view 做相应的动作,当其子 view 动时,一般来讲 AppbarLayout 也会变化,此时也就是所谓的Dependency发生了变化,那child——NestedScrollView 也要做出相应变化,这个变化当然是由 NestedScrollView 设置的 behavior 属性决定的

AppbarLayout 子 view 的动作

AppbarLayout 继承自 LinearLayout
子 view 可设置app:layout_scrollFlags属性,该属性可以有一下几个值

  • scroll:设置子 view 可滚动,可以是 AppbarLayout 夺走 NestedScrollView 的滚动事件后,使得子 view 滚动,或者是手指直接在子 view 上滑动使其滚动
  • exitUntilCollapsed:向上滚的时候,子 view 先移动,当子 view 移动到最小高度后,NestedScrollView 再移动,且子 view 不可能移除屏幕,一定有最小高度这一部分留在屏幕内
  • enterAlways:向下移动时先移动子 view,再移动 NestedScrollView
  • enterAlwaysCollapsed:enterAlways 的附加项,向下移动到子 view 的最小高度后,移动 NestedScrollView,NestedScrollView 移动完毕后,在移动子 view,直到子 view 全部移动完毕

CollapsingToolbarLayout

继承自 FrameLayout
当 CollapsingToolbarLayout 作为 AppbarLayout 的子 view 滚动时,它的子 view 都为随着滚动

属性 效果 contentScrim 折叠后 toolbar 的颜色 toolbarId 需要是使用折叠效果的目标 toolbar titleEnable 启用 CollapsingToolbarLayout 的 title
toolbar 的 title 会被隐藏 title CollapsingToolbarLayout 的 title

CollapsingToolbarLayout 的 title 不同于 toolbar 的 title,它能跟随 CollapsingToolbarLayout 的变化而放大缩小,以及平移
这个 title 还有其他一些属性能设置,比如外边距什么的

子 view 有的属性 效果 layout_collapseMode 值为pin表示当 CollapsingToolbarLayout 滚动到高度与设置该值的子 view 相同时,该子 view 才开始滚动
值为parallax表示滚动过程中保持 view 的中间区域可见

toolbarId必须被设置,否则 toolbar 将被视为普通 view,设置这个属性后,toolbar 将被区别对待,具体表现为

  • toolbar 的layout_collapseMode的值为pin时,toolbar 不会被滚出屏幕;如果不设置toolbarId,又希望 toolbar 不被滚出屏幕,那只能给 CollapsingToolbarLayout 设置一个最小高度
  • 在不是这toolbarId的情况下,如果设置了contentScrim,折叠后 toolbar 的标题会被隐藏
阅读全文
0 0
原创粉丝点击