保持 CollapsingToolbarLayout 永久关闭,只能以编程方式控制

Keep CollapsingToolbarLayout permanently closed, only control programatically

我只想以编程方式展开 CollapsingToolbarLayout。

我遇到了这个: https://code.luasoftware.com/tutorials/android/how-to-disable-or-lock-collapsingtoolbarlayout-collapse-or-expand/

有效。但是,我想让 RecyclerView Touch 事件保持活动状态,因为我在协调器布局中有一个 FAB。

这可能吗?

我不记得我是从哪里得到这个的,但它对我来说非常有用。它是 AppBarLayout 的自定义行为:

public class LockableAppBarLayoutBehavior extends AppBarLayout.Behavior {

    boolean locked;
    private DragCallback dragCallBack = new DragCallback() {
        @Override
        public boolean canDrag(@NonNull AppBarLayout appBarLayout) {
            return !locked;
        }
    };

    public LockableAppBarLayoutBehavior() {
        setDragCallback(dragCallBack);
    }

    public LockableAppBarLayoutBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
        setDragCallback(dragCallBack);
    }

    public void setLocked(boolean locked) {
        this.locked = locked;
    }

    @Override
    public boolean onStartNestedScroll(CoordinatorLayout parent, AppBarLayout child, View directTargetChild, View target, int nestedScrollAxes, int type) {
        if (locked) {
            return false;
        }

        return super.onStartNestedScroll(parent, child, directTargetChild, target, nestedScrollAxes, type);
    }

    public boolean isLocked() {
        return locked;
    }
}

最简单的用法是在您的布局中 xml:

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    app:layout_behavior="path.to.the.class.LockableAppBarLayoutBehavior"
    >

最后,这是您在代码中锁定和解锁的方式:

CoordinatorLayout.LayoutParams layoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams();
LockableAppBarLayoutBehavior behavior = (LockableAppBarLayoutBehavior) layoutParams.getBehavior();
behavior.setLocked(true);