Deshabilitar desplazamiento vertical en CollapsingToolbarLayout / AppBarLayout
Quisiera que el desplazamiento vertical en el CollapsingToolbarLayout / AppBarLayout SOLAMENTE cuando el acontecimiento del desplazamiento / tacto ocurra en el nestedscrollview (esto está trabajando), pero si el usuario intenta desplazar el CollapsingToolbarLayout / AppBarLayout directamente no debe trabajar. Necesito esto porque los eventos de desplazamiento / toque están jugando con mis eventos de desplazamiento de recyclerview.
Tengo esta estructura:
- ¿Cómo crear un diseño de barra de herramientas doblado?
- CollapsingToolBarLayout - barra de estado
- CollapsingToolbarLayout no debe colapsar cuando RecyclerView está vacío
- Espacio adicional entre el título de la barra de herramientas Colapsing y el botón Inicio / Arriba
- Android: CollapsingToolbarLayout y SearchView, texto superpuesto
CoordinatorLayout -- AppBarLayout ---- CollapsingToolbarLayout (scrollflags: scroll, exitUntilCollapsed, snap) ------ Toolbar (CollapseMode: pin) ------ RecyclerView (Horizontal, CollapseMode: pin) ----- /CollapsingToolbarLayout -- /AppBarLayout -- NestedScrollView (Behaviour: appbar_scrolling_view_behavior) -- /NestedScrollView / CoordinatorLayout
Intenté sobreescribir onTouch () y onInterceptTouchEvent () tanto para CollapsingToolbarLayout / AppBarLayout, pero sigue interceptando el evento táctil / scroll.
- Cuando se ejecuta en Nougat, ¿por qué el título se corta cuando se utiliza un CollapsingToolbarLayout?
- RecyclerView dentro de la disposición de NestedScrollView sin desplazamiento
- ¿Cómo evitar el bloqueo de desplazamiento en sí mismo cuando se utiliza setNestedScrollingEnabled (false)?
- Expanda el appbarlayout cuando se desplaza la vista de reciclaje / fling to top
Ok, me enteré de la solución para esto.
Sólo tiene que anular el método onDrag () en el comportamiento AppBarLayout y la desplazamiento no se activará si el toque se produce en la parte superior de la vista 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; } });
Solución de aquí: ¿Cómo desactivar el desplazamiento de AppBarLayout en CoordinatorLayout?
Si se ejecuta en NullPointerException debido a un comportamiento null, debe asignar uno primero:
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mAppbar.getLayoutParams(); params.setBehavior(new AppBarLayout.Behavior());