Android - 吸顶效果 布局篇

调研了一下微博和豆瓣等大体量的APP,发现内容详情页的评论吸顶效果非常常见。

    以截图自豆瓣的效果为例,当上划至内容部分消失时,滑动中的回复条会置顶,并保持在位置不动。

Android - 吸顶效果 布局篇_第1张图片Android - 吸顶效果 布局篇_第2张图片

  笔者通过实践,记录下目前发现的最easy 的写法,只改变布局,不需要代码动态修改。使用方式如下:

  Android - 吸顶效果 布局篇_第3张图片

View A: 当滑动时,需要滑动上去不见的部分

View B:当滑动到顶端时,需要保持可见的部分

View C:一般来说是一个RecyclerView



    

        

        


    


    


       主要是通过CoordinateLayout(协调者布局)和AppBarLayout两者相结合。通过app:layout_behavior的设置达到效果。

       简单介绍一下CoordinateLayout吧。

/**
 * CoordinatorLayout is a super-powered {@link android.widget.FrameLayout FrameLayout}.
 *
 * 

CoordinatorLayout is intended for two primary use cases:

*
    *
  1. As a top-level application decor or chrome layout
  2. *
  3. As a container for a specific interaction with one or more child views
  4. *
* *

By specifying {@link Behavior Behaviors} for child views of a * CoordinatorLayout you can provide many different interactions within a single parent and those * views can also interact with one another. View classes can specify a default behavior when * used as a child of a CoordinatorLayout using the * {@link DefaultBehavior} annotation.

        官方给出的解释是加强版的FrameLayout,所以基本使用跟FrameLayout一样。要不就是layout中最顶层的父View,也就是上图包括View A,View B,View C的情况,要不就是当成一个layout容器在父视图中。我们这次使用的的是第一种情况,作为父布局的情况。

       CoordinatorLayout主要多增加的属性就是app:layout_behavior了。不设置时就是默认不添加behavior的情况,像View B这样。在例子中,是包含在CoordinatorLayout中的View C设置了behavior属性,使用的是官方默认的,当然如果你需要的话,也可以自定义behavior来使用。

       具体的引用值如下

com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior
com.google.android.material.bottomsheet.BottomSheetBehavior
com.google.android.material.transformation.FabTransformationScrimBehavior
com.google.android.material.transformation.FabTransformationSheetBehavior
com.google.android.material.behavior.HideBottomViewOnScrollBehavior

      根据name也可以看出来使用场景了,这里不赘述了。这边使用的是和AppBarLayout配套的app:layout_behavior="@string/appbar_scrolling_view_behavior"。啥意思呢,就是viewC这个childView,要把自己放在appBar底下滑动。

      再看滑着滑着就不见的View A,放置在AppBarLayout这个容器里面,特别设置了一个属性:app:layout_scrollFlags="scroll|enterAlways" 这个scrollFlags属性呢,有5个值可以填。

    scroll :跟着滑动,在屏幕里面滑进滑出。这个属性是主要属性,底下的属性就是附加效果。只有scroll这个属性时,View C滑到顶,第一个item可见,View A才滑动显示出来。

    enterAlways:View C快滑到顶的时候,View A先滑动显示出来,最后View C才划到第一个Item可见。

    enterAlwaysCollapsed:往下滑时,View A先逐渐滑动,到最小值时,View C再滑动

    snap:上下滑手指离开时,View A要么全显示,要么不显示,没中间过渡态

    exitUntilCollapsed:往上滑时,View A滑到最小状态,然后View C再滑动

你可能感兴趣的:(android,android,ui)