Elemento de centrado de Android en RecyclerView
Im un novato en androide. No estoy seguro de por qué no puedo centrar mi artículo en RecyclerView.
Lo que quiero es como debajo de la imagen: –
- Anular la animación para notifyItemChanged en RecyclerView.Adapter
- RecyclerView java.lang.IndexOutOfBoundsException: Inconsistencia detectada. Posición de elemento no válida cuando se reanuda desde fragmento añadido
- Selección única en RecyclerView
- Cómo redimensionar el visor en un RecyclerView
- Crear menú de opciones para RecyclerView-Item
¿Qué procesamiento de Android es como debajo de la imagen: –
¿Hay una manera de empujar los artículos en RecyclerView al centro? Así que se verá así: –
También proveo los archivos de diseño como a continuación: –
Recycler_item.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/calendar_itemContainer"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="April" android:id="@+id/calendar_txtMonth" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:textColor="#ff58636d" android:textSize="16sp" android:gravity="center|center_vertical|center_horizontal" android:paddingTop="8dp" android:paddingLeft="12dp" android:paddingRight="12dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="21" android:id="@+id/calendar_txtDay" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" android:layout_below="@+id/calendar_txtMonth" android:layout_alignParentRight="true" android:layout_alignParentEnd="true" android:textColor="#ff58636d" android:textSize="40sp" android:layout_marginTop="-10dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingBottom="5dp" android:gravity="center|center_vertical|center_horizontal" /> </RelativeLayout>
Fragment_calendar.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/calendar_recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:scrollbars="horizontal" android:background="#ff2c3e50" /> </RelativeLayout>
Y los códigos java: –
CalendarAdapter mAdapter = new CalendarAdapter(mDataset); mLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false); mRecyclerView.setLayoutManager(mLayoutManager); mAdapter.setCalendarCallbacks(this); mRecyclerView.setAdapter(mAdapter); mRecyclerView.setItemAnimator(new DefaultItemAnimator()); selectItem(mCurrentSelectedPosition);
- RecyclerView muestra los datos eliminados en la lista
- ListSelector para RecyclerView en el dispositivo táctil libre (usando onKey Listener)
- Agregue una vista dinámicamente al elemento del RecyclerView
- Elementos de recyclerview confundidos
- Horizontal RecyclerView con elementos que tienen altura dinámica
- Transición de elemento compartido en RecyclerView
- Android TV RecyclerView interacción con el foco
- Cómo resaltar correctamente el elemento seleccionado en RecyclerView?
Estaba tratando de hacer lo que creo que es lo mismo que estás preguntando cuando me encontré con este post. Aquí está la solución que acabé usando.
Crea tu propia subclase de LinearLayoutManager y reemplaza getPaddingLeft () y getPaddingRight () así.
public class CustomLayoutManager extends LinearLayoutManager { private int mParentWidth; private int mItemWidth; public CustomLayoutManager(Context context, int parentWidth, int itemWidth) { super(context); mParentWidth = parentWidth; mItemWidth = itemWidth; } @Override public int getPaddingLeft() { return Math.round(mParentWidth / 2f - mItemWidth / 2f); } @Override public int getPaddingRight() { return getPaddingLeft(); } }
parentWidth
debe ser el ancho de RecyclerView
y itemWidth
debe ser el ancho de cada una de las vistas secundarias, tanto en píxeles. Obviamente, esto sólo funciona si sabes que todas las vistas de tu hijo tendrán el mismo ancho.
A continuación, utilice este gestor de diseño con su RecyclerView
Establecer recyclerview a:
android:layout_width="wrap_content" android:layout_gravity="center_horizontal"
Arreglado para mí
@majormajors respuesta fue cerca, pero se iniciará centrando el primer elemento en la lista y no centralizar los elementos (como un todo), como se muestra en las imágenes. Debe realizarse un cálculo adicional para comprobar el ancho total del elemento. He modificado el código publicado por @majormajors.
public class CenterItemLayoutManager extends LinearLayoutManager { private final int parentWidth; private final int itemWidth; private final int numItems; public CenterItemLayoutManager( final Context context, final int orientation, final int parentWidth, final int itemWidth, final int numItems) { super(context, orientation, false); this.parentWidth = parentWidth; this.itemWidth = itemWidth; this.numItems = numItems; } @Override public int getPaddingLeft() { final int totalItemWidth = itemWidth * numItems; if (totalItemWidth >= parentWidth) { return super.getPaddingLeft(); // do nothing } else { return Math.round(parentWidth / 2f - totalItemWidth / 2f); } } @Override public int getPaddingRight() { return getPaddingLeft(); } }
En este caso, los elementos se centrarán sólo si no superan la anchura de reciclerview … de lo contrario sólo actuará como lo haría normalmente.
Fácil como el pastel con la nueva clase añadida a la biblioteca de soporte – android.support.v7.widget.LinearSnapHelper
Basta con crear una instancia y adjuntarla al reciclador.
LinearSnapHelper snapHelper = new LinearSnapHelper(); snapHelper.attachToRecyclerView(recyclerView);
Acaba de añadir android:orientation="vertical"
a la raíz de la vista del artículo. Vamos a intentarlo.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="180dp" android:orientation="vertical" android:padding="4dp"> <ImageView android:id="@+id/movie_column_photo" android:layout_width="80dp" android:layout_height="120dp" android:layout_gravity="center_horizontal"/> <TextView android:id="@+id/movie_column_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center"/> </LinearLayout>
- Android: ¿Cómo se ocultan las pestañas en la barra de acción?
- ¿Debugging usando una máquina virtual como VMWare / VirtualBox?