studio recyclerview recycler personalizado ejemplo dependency cards android scrollbars android-recyclerview

android - personalizado - ¿Hay alguna forma de habilitar las barras de desplazamiento para RecyclerView en el código?



recyclerview dependency android (6)

Como vimos, RecyclerView es más efectivo que ListView, por lo que prefiero usarlo en mi proyecto. Pero recientemente tuve un problema cuando lo puse en mi ViewGroup personalizado. RecyclerView es fácil de configurar barras de desplazamiento en xml como esta:

<android.support.v7.widget.RecyclerView android:id="@+id/recycler_view" android:scrollbars="vertical" android:layout_width="match_parent" android:layout_height="match_parent" />

Pero realmente no puedo encontrar ningún método para establecer las barras de desplazamiento en el código de RecyclerView, lo que he intentado es:

mRecyclerView.setVerticalScrollBarEnabled(true);

y luego vi this en el documento de Android.

Así que intenté crear mi propio LayoutManager y anular las funciones que pensé que necesitaba. Pero finalmente fallé. Entonces, ¿alguien puede decirme cómo debo hacer mi propio LayoutManager o simplemente mostrarme otra solución? ¡Gracias!


Establecer la barra de desplazamiento vertical en el diseño xml

<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" />


Por el momento parece imposible habilitar las barras de desplazamiento mediante programación. La razón de ese comportamiento es que Android no llama a View.initializeScrollbarsInternal(TypedArray a) o View.initializeScrollbars(TypedArray a) . Ambos métodos solo se invocan si crea una instancia de su RecyclerView con un AttributeSet.
Como solución alternativa, sugeriría que cree un nuevo archivo de diseño solo con su RecyclerView: vertical_recycler_view.xml

<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:scrollbars="vertical" android:layout_width="match_parent" android:layout_height="match_parent" />

Ahora puede inflar y agregar RecyclerView con barras de desplazamiento donde quiera: MyCustomViewGroup.java

public class MyCustomViewGroup extends FrameLayout { public MyCustomViewGroup(Context context) { super(context); RecyclerView verticalRecyclerView = (RecyclerView) LayoutInflater.from(context).inflate(R.layout.vertical_recycler_view, null); verticalRecyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); addView(verticalRecyclerView); } }


Preferiría usar ContextThemeWrapper para eso.

Primero defina en Style.xml:

<style name="ScrollbarRecyclerView" parent="android:Widget"> <item name="android:scrollbars">vertical</item> </style>

Y luego, cada vez que inicialice su RecyclerView, use ContextThemeWrapper :

RecyclerView recyclerView = new RecyclerView(new ContextThemeWrapper(context, R.style.ScrollbarRecyclerView));


Puede hacerlo sin inflar un diseño XML, pero deberá declarar un atributo de tema personalizado y un estilo:

<resources> <attr name="verticalRecyclerViewStyle" format="reference"/> <style name="VerticalRecyclerView" parent="android:Widget"> <item name="android:scrollbars">vertical</item> </style> </resources>

Luego establezca el valor del atributo al estilo en su tema:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="verticalRecyclerViewStyle">@style/VerticalRecyclerView</item> </style>

Ahora puede crear RecyclerView mediante programación con una barra de desplazamiento vertical:

RecyclerView recyclerView = new RecyclerView(context, null, R.attr.verticalRecyclerViewStyle);


Solo en propiedades xml

<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/recyclerView" android:scrollbars="vertical" <!-- type of scrollbar --> android:scrollbarThumbVertical="@android:color/darker_gray" <!--color of scroll bar--> android:scrollbarSize="5dp"> <!--width of scroll bar--> </android.support.v7.widget.RecyclerView>


Use un código como:

<androidx.recyclerview.widget.RecyclerView android:id="@+id/categoryRecyclerLayout" android:layout_width="414dp" android:layout_height="652dp" android:scrollbars="vertical" .... />