Centrar elementos en un RecyclerView cuando se implementa con GridLayoutManager

Tengo un RecyclerView implementado usando el GridLayoutManager.

Dependiendo de cuántos elementos hay en el conjunto de datos, el spanCount está entre 1-4. Los anchos de los artículos cambian dependiendo del spanCount. Si el spancount es 4 o más, el spanCount se deja en 4.

Si tengo 5 artículos, esto deja 1 artículo de sobra (4 elementos en 1 fila, 1 artículo de sobra), situado a la izquierda de la pantalla, en una fila por sí mismo. Me gustaría que estuviera centrado.

He intentado fijar el margen izquierdo sobre el artículo programatically, y envolver el recyclerView y los artículos individuales en LinearLayouts y fijar la gravedad al centro, así como fijar la gravedad del recyclerView.

Ejemplo XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" > <RelativeLayout android:layout_width="200dp" android:layout_height="200dp" android:layout_gravity="center" android:id="@+id/relative" /> </LinearLayout> 

Ejemplo de RecyclerView XML

  <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal" > <android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> 

¿Puede alguien sugerir una solución o, darme material para trabajar desde.

Gracias por adelantado.

La respuesta a esto es que, al establecer el spancount del GridLayoutManager, cada elemento, no importa cuán grande intente y lo haga, no se expandirá en tamaño más allá de las dimensiones permitidas al elemento individual. Esto permitió la dimensión "cajas" en el elemento, y el tamaño de la caja se especifica por la altura total y el ancho de la reciclado en relación con, el spancount establecido en el GridLayoutManager. Esto también significa que no puede utilizar ajustes de gravedad para empujar un elemento fuera de su "cuadro".

La caja / celda del elemento generalmente se calcula de la siguiente manera: si el ancho de la rectilerview es 100dp y el spancount es 2, cada caja / celda de artículos tendrá un ancho de: width / spanCount. En este caso, cada cuadro tendrá un ancho de 50dp (100dp / spanCountOf2).

Para que un elemento tome el 100dp completo, y luego se centrará en el espacio de 100dp, el elemento tendrá que ocupar 2 spancounts es decir, si el ancho es 100dp, y spancount es 2, cada artículo se asigna 50dp en Width (1 de los 2 spancount disponibles), para que el elemento tome el 100dp completo, debe indicarle al gridLayoutManager que el elemento en la posición X ocupa 2 spanCounts en lugar de 1. Una vez que el elemento ocupa todo el ancho o La cantidad de vanos que desea que ocupe, se puede centrar o cambiar el tamaño dentro de su nueva caja definida (el tamaño de la caja es la anchura / altura del reciclador en relación con su spancount).

Para modificar la cantidad de intervalos que un determinado elemento ocupa, llame a: setSpanSizeLookup () en GridLayoutManager. A continuación, identifique la posición del elemento que desea cambiar el spanSize de y en la instrucción de devolución del método setSpanSizeLookup (), devuelva cuántos vanos desea que use:

  gridlayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { if (position == 1) { return 4; // the item in position now takes up 4 spans } return 1; } }); } 

Alterando el spanCount de elementos, puede utilizar la configuración de gravedad para centrar un elemento en el centro de una fila, si ese elemento ocupa el spancount total para cada fila.

Sin embargo, es posible que deba usar también diseños alternativos en el adaptador para que sus elementos se centren en los elementos. Así pues, potentiall, usted puede ser que tenga que mezclar y emparejar entre los ajustes diversos cuenta del palmo y usar diversas disposiciones vía el método de getItemViewType () en el recyclerAdapter.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.