android – 在CollapsingToolbarLayout / AppBarLayout中禁用垂直滚动

前端之家收集整理的这篇文章主要介绍了android – 在CollapsingToolbarLayout / AppBarLayout中禁用垂直滚动前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在nestedscrollview中发生滚动/触摸事件时,只在CollapsingToolbarLayout / AppBarLayout上进行垂直滚动(这是有效的),但是如果用户试图直接滚动CollapsingToolbarLayout / AppBarLayout,它应该不起作用.我需要这个,因为那里的滚动/触摸事件搞乱了我的recyclerview滚动事件.

我有这个结构:

CoordinatorLayout

-- AppBarLayout

---- CollapsingToolbarLayout (scrollflags: scroll,exitUntilCollapsed,snap)

------ Toolbar (CollapseMode: pin)

------ RecyclerView (Horizontal,CollapseMode: pin)

----- /CollapsingToolbarLayout

-- /AppBarLayout

-- NestedScrollView (BehavIoUr: appbar_scrolling_view_behavior)

-- /NestedScrollView

/ CoordinatorLayout

我尝试为CollapsingToolbarLayout / AppBarLayout重写onTouch()和onInterceptTouchEvent(),但它会一直拦截触摸事件/滚动.

解决方法

好的,我找到了解决方案.

您只需要覆盖AppBarLayout行为中的onDrag()方法,如果触摸发生在AppBarLayout视图的顶部,则不会触发滚动.

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
AppBarLayout.Behavior behavior = (AppBarLayout.Behavior) params.getBehavior();
behavior.setDragCallback(new AppBarLayout.Behavior.DragCallback() {
    @Override
    public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
        return false;
    }
});

解决方案来自:
How to disable scrolling of AppBarLayout in CoordinatorLayout?

如果由于null行为而遇到NullPointerException,则应首先分配一个:

CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppbar.getLayoutParams();
params.setBehavior(new AppBarLayout.Behavior());

猜你在找的Android相关文章