studio recyclerview manager ejemplo con cardview android android-recyclerview right-to-left gridlayoutmanager

android - ejemplo - ¿Cómo puedo llenar RecyclerView con GridLayoutManager de derecha a izquierda?



recyclerview android studio ejemplo (5)

A primera vista, GridLayouManager debe llenar filas desde la derecha cuando getLayoutDirection() le da a ViewCompat.LAYOUT_DIRECTION_RTL . Normalmente, esta dirección se heredará RecyclerView''s contenedor RecyclerView''s .

Pero si esto no funciona como se esperaba, o si necesita GridLayoutManager a la API 16, o si tiene algún dispositivo con mala implementación de soporte de RTL, simplemente puede extraer el GridLayoutManager de github y usar un administrador personalizado que sintonice. gusto.

Puede ser suficiente para ampliar el stock GridLayoutManager y anular layoutChunk() .

Estoy tratando de llenar algunos datos en un RecyclerView con GridLayoutManager :

GridLayoutManager layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false);

Esto llenará los datos en la cuadrícula de izquierda a derecha . El primer elemento se colocará en la parte superior izquierda, etc.

Pero la aplicación que estoy desarrollando está diseñada para un lenguaje RTL, así que necesito que se llene de derecha a izquierda .

Intenté cambiar el último argumento a true . Pero solo desplazó el RecyclerView hacia abajo.

La configuración del atributo layoutDirection para RecyclerView no funciona (sin tener en cuenta que mi API mínima es 16 y este atributo se agrega para API17 +):

<android.support.v7.widget.RecyclerView android:id="@+id/grid" android:layoutDirection="rtl" android:layout_width="match_parent" android:layout_height="match_parent"/>

¿Cómo puedo crear una cuadrícula rellena de derecha a izquierda con RecyclerView ?


Cree una clase que amplíe GridLayoutMAnager y anule el método isLayoutRTL() esta manera:

public class RtlGridLayoutManager extends GridLayoutManager { public RtlGridLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } public RtlGridLayoutManager(Context context, int spanCount) { super(context, spanCount); } public RtlGridLayoutManager(Context context, int spanCount, int orientation, boolean reverseLayout) { super(context, spanCount, orientation, reverseLayout); } @Override protected boolean isLayoutRTL(){ return true; } }


Es muy simple, simplemente llame al método setReverseLayout como,

GridLayoutManager layoutManager = new GridLayoutManager(this, 3, GridLayoutManager.VERTICAL, false); layoutManager.setReverseLayout(true);


Hay una mejor manera de hacerlo.

Puedes cambiar programáticamente la dirección de diseño de RecycleView

workHourRecycler = view.findViewById(R.id.market_hours_recycler); workHourRecycler.setLayoutManager(new GridLayoutManager(getContext(),4)); //Programtically set the direction workHourRecycler.setLayoutDirection(View.LAYOUT_DIRECTION_RTL);


La respuesta de Mohammad es verdadera, pero no es necesario crear una nueva clase. simplemente puede anular el método isLayoutRTL.

GridLayoutManager lm = new GridLayoutManager(this, 2) { @Override protected boolean isLayoutRTL() { return true; } };