Держите CollapsingToolbarLayout постоянно закрытым, управляйте только программно - PullRequest
0 голосов
/ 21 октября 2018

Я хочу, чтобы только CollapsingToolbarLayout расширялся программно.

Я сталкивался с этим: https://code.luasoftware.com/tutorials/android/how-to-disable-or-lock-collapsingtoolbarlayout-collapse-or-expand/

Это работает.Но я хочу, чтобы события RecyclerView Touch оставались активными, поскольку у меня есть FAB в макете координатора.

Возможно ли это?

1 Ответ

0 голосов
/ 21 октября 2018

Я не помню, откуда я это взял, но он прекрасно работает для меня.Это пользовательское поведение для 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);
...