Disable vertical scroll in CollapsingToolbarLayout / AppBarLayout

前端 未结 3 716
佛祖请我去吃肉
佛祖请我去吃肉 2021-02-05 17:55

I would like the vertical scroll on the CollapsingToolbarLayout / AppBarLayout ONLY when the scroll/touch event occurs in the nestedscrollview (this is working), but if the user

3条回答
  •  粉色の甜心
    2021-02-05 18:04

    I wrote a BindingAdapter for nsL's answer:

    @BindingAdapter("scrollable")
    fun setScrollable(appBarLayout: AppBarLayout, scrollable: Boolean) {
        val layoutParams = appBarLayout.layoutParams as CoordinatorLayout.LayoutParams
        val behavior = (layoutParams.behavior as? AppBarLayout.Behavior) ?: AppBarLayout.Behavior()
        behavior.setDragCallback(object : AppBarLayout.Behavior.DragCallback() {
            override fun canDrag(appBarLayout: AppBarLayout): Boolean = scrollable
        })
        layoutParams.behavior = behavior
    }
    

    You can use it in a databinding layout like this:

    
    ...
    
    

    In my case I also wanted to disable the scroll on the NestedScrollView, which is why I wrote a second BindingAdapter:

    @BindingAdapter("scrollable")
    fun setScrollable(nestedScrollView: NestedScrollView, scrollable: Boolean) {
        nestedScrollView.setOnTouchListener { _, _ -> !scrollable }
    }
    

提交回复
热议问题