android - not - scroll recyclerview
Recyclerview dentro de Nested Scrollview scroll pero no se desplaza rĂ¡pidamente como Recyclerview normal o Nested Scrollview (10)
Estoy usando
RecyclerView
dentro de
NestedScrollView
y funciona.
Pero cuando uso
RecyclerView
dentro de
LinearLayout
o algo así, se desplaza a varias velocidades dependiendo del gesto.
El desplazamiento escucha el gesto y si me deslizo solo un poco hacia arriba, entonces se desplaza un poco, mientras que si me deslizo hacia arriba muy rápido, entonces se desplaza muy rápido.
Ahora mi problema es que
RecyclerView
dentro de
NestedScrollView
ciertamente se desplaza pero el desplazamiento rápido no funciona.
Sin embargo, me deslizo hacia arriba rápido o lento,
RecyclerView
o
NestedScrollView
solo se desplazan un poco.
¿Cómo puedo hacer que mi
NestedScrollView
o
RecyclerView
dentro de esa vista de desplazamiento se desplace a varias velocidades?
De forma predeterminada,
setNestedScrollingEnabled
funciona solo después de API-21.
Puede usar
ViewCompat.setNestedScrollingEnabled(recyclerView, false);
para deshabilitar el desplazamiento anidado para antes y después de API-21 (Lollipop).
Enlace a la documentación
.
¡Espero que esto ayude!
Debe ajustar la vista del reciclador en cualquier diseño como LinearLayout y establecer el tamaño de RecyclerView en constante, como 800dp. Esto permitirá un desplazamiento suave y la vista del reciclador seguirá siendo una vista del reciclador durante el desplazamiento.
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="800dp"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>
Después de varias iteraciones, se me ocurrió una solución.
-
Si está utilizando RecyclerView, entonces:
recyclerView.setNestedScrollingEnabled(false);
-
Si está utilizando LinearLayout dentro de NestedScrollingView, tome LinearLayout dentro de una ScrollView normal y luego configure su desplazamiento en
scrollView.setNestedScrollingEnabled(false);
Estaba trabajando en Android 16 donde no era posible usar el método setNestedSCrollEnabled,
Lo que termino haciendo para evitar que RecyclerView maneje Scrolls.
Al igual que en LinerLayoutManager, hice canScrollHorizontally, canScrollVertically para devolver false por defecto.
myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
@Override
public boolean canScrollHorizontally() {
return false;
}
@Override
public boolean canScrollVertically() {
return false;
}
});
Esto es WAI El NestedScrollView mide a sus hijos con la especificación "Sin especificar". El niño también puede crecer tanto como quiera.
Esto esencialmente equivale a la altura de NSV y RV. Entonces, en lo que respecta a la RV, cree que se muestra completamente.
Envuelva su RV con un LL y dele altura a su RV. El LL no establecería la especificación de la medida como NO ESPECIFICADA, por lo que el RV se desplazaría correctamente dentro de la altura establecida de cualquier DP que proporcione.
El único inconveniente de este método es que no podrá hacer una coincidencia de padres en su RV.
Puede usar ScrollView con la clase ExtendRecyclerView que anula el método onMeasure. ¡Funciona para mi!
@Override
protected void onMeasure(int widthSpec, int heightSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthSpec, expandSpec);
}
También me encontré con este problema.
Y actualizar a
26.1.0
arreglarlo.
tratar
recyclerView.setNestedScrollingEnabled(false);
android: overScrollMode = "nunca
recyclerView.setNestedScrollingEnabled(false);
<android.support.v4.widget.NestedScrollView
android:id="@+id/nestedScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:overScrollMode="never">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
A veces será útil, pero no es aconsejable para todas las veces, ya que deshabilita la función de reciclaje de la vista en la vista del recylcer.
Alternativas:
Pruebe CollapsiveToolbarLayout con la vista Recycler. poner otras vistas en el diseño desplegable de la barra de peaje.