Este es un ejemplo de cómo podría haberse hecho previamente en la ListViewclase, utilizando los parámetros divider y dividerHeight :
<ListView
android:id="@+id/activity_home_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="8dp"/>
Sin embargo, no veo esa posibilidad en la RecyclerViewclase.
<android.support.v7.widget.RecyclerView
android:id="@+id/activity_home_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
En ese caso, ¿está bien definir márgenes y / o agregar una vista divisoria personalizada directamente en el diseño de un elemento de lista o hay una mejor manera de lograr mi objetivo?
android
android-recyclerview
divider
Ojos claros
fuente
fuente

com.homeretailgroup.argos.android.view.decorators.DividerItemDecorationymRecyclerView.addItemDecoration(new DividerItemDecoration(activity, LinearLayoutManager.VERTICAL));Respuestas:
Actualización de octubre de 2016
La versión 25.0.0 de Android Support Library introdujo la
DividerItemDecorationclase:Uso:
Respuesta anterior
Algunas respuestas usan métodos que han quedado obsoletos, o no dan una solución completa, por lo que intenté hacer un resumen breve y actualizado.
A diferencia
ListView, laRecyclerViewclase no tiene parámetros relacionados con el divisor. En cambio, necesita extenderItemDecoration,RecyclerViewla clase interna de a:VerticalespaciadoItemDecorationExtienda
ItemDecoration, agregue un constructor personalizado que tome espacioheightcomo parámetro ygetItemOffsets()método de anulación :Si no desea insertar espacio debajo del último elemento, agregue la siguiente condición:
Nota: también se puede modificar
outRect.top,outRect.leftyoutRect.rightpropiedades para el efecto deseado.Divisor
ItemDecorationMétodo de extensión
ItemDecorationy anulaciónonDraw():Puede llamar al primer constructor que usa los atributos de divisor de Android predeterminados, o al segundo que usa su propio dibujable, por ejemplo drawable / divider.xml
Nota: si desea que el divisor se dibuje sobre sus elementos, anule el
onDrawOver()método en su lugar.Uso
Para usar su nueva clase add
VerticalSpaceItemDecorationoDividerSpaceItemDecorationtoRecyclerView, por ejemplo en elonCreateView()método de su fragmento :También está la biblioteca de Lucas Rocha, que se supone que simplifica el proceso de decoración del artículo. Aunque no lo he intentado.
Entre sus características están:
fuente
onDraw(). Solo hago referencia a instancias ya existentes.canvas.drawLine(startX, startY, stopX, stopY, mPaint)enonDrawOver? ¿Alguna diferencia de rendimiento?Solo agrega
También es posible que deba agregar la dependencia
compile 'com.android.support:recyclerview-v7:27.1.0'EDITAR:
Para personalizarlo un poco, puede agregar un dibujo personalizado:
Puede usar cualquier dibujo personalizado, por ejemplo:
fuente
Configurationpara el divisor vertical:if (orientation == Configuration.ORIENTATION_LANDSCAPE) { recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL)); } else { recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));}¿Puedo dirigir su atención a este archivo en particular en Github por Alex Fu: https://gist.github.com/alexfu/0f464fc3742f134ccd1e
Es el archivo de ejemplo DividerItemDecoration.java "extraído directamente de las demostraciones de soporte". ( Https://plus.google.com/103498612790395592106/posts/VVEB3m7NkSS )
Pude obtener líneas divisorias muy bien después de importar este archivo en mi proyecto y agregarlo como decoración de un elemento a la vista del reciclador.
Así es como se ve mi onCreateView en mi fragmento que contiene la vista Recycler:
Estoy seguro de que se puede hacer un estilo adicional, pero es un punto de partida. :)
fuente
ItemDecorationImplementación simple para espacios iguales entre todos los elementos.fuente
getChildPositionahora está en desuso,getChildAdapterPositionse puede usar en su lugar.super.getItemOffsets, o sus compensaciones se sobrescribirán.getChildLayoutPositionusarse?La simple es establecer el color de fondo para RecyclerView y un color de fondo diferente para los elementos. Aquí hay un ejemplo ...
y el elemento TextView (aunque puede ser cualquier cosa) con margen inferior "x" dp o px.
La salida ...
fuente
Creo que usar un divisor simple lo ayudará
a agregar un divisor a cada elemento:
1- Agregue esto al directorio dibujable line_divider.xml
2- Crear clase SimpleDividerItemDecoration
Utilicé este ejemplo para definir esta clase:
https://gist.github.com/polbins/e37206fbc444207c0e92
3- En la actividad o fragmento que usa RecyclerView, dentro de onCreateView agrega esto:
4- Para agregar espacio entre los elementos
, solo necesita agregar la propiedad de relleno a la vista del elemento
fuente
Como he establecido
ItemAnimators. losItemDecoratorno entrar o salir junto con la animación.Simplemente terminé teniendo una línea de vista en mi archivo de diseño de vista de elemento de cada elemento. Resolvió mi caso.
DividerItemDecorationse sentía demasiado hechicero para un simple divisor.fuente
Esto es simple, no necesitas un código tan complicado
Agregue esto en su dibujo: line_divider.xml
fuente
Dado que todavía no hay una forma correcta de implementar esto correctamente usando Material Design, acabo de hacer el siguiente truco para agregar un divisor en el elemento de la lista directamente:
fuente
La forma en que estoy manejando la vista del divisor y también las inserciones del divisor es agregando una extensión RecyclerView.
1)
Agregue un nuevo archivo de extensión nombrando View o RecyclerView:
y agregue el
setDividermétodo de extensión dentro del archivo RecyclerViewExtension.kt.2)
Cree un archivo de recursos Drawable dentro del
drawablepaquete comorecycler_view_divider.xml:donde puede especificar el margen izquierdo y derecho en
android:insetLeftyandroid:insetRight.3)
En su Actividad o Fragmento donde se inicializa RecyclerView, puede establecer el dibujo personalizado llamando a:
4)
Saludos 🍺
fuente
Si alguien está buscando agregar solo, digamos, un espacio de 10dp entre elementos, puede hacerlo estableciendo un dibujable para
DividerItemDecoration:¿Dónde
divider_10dpestá un recurso extraíble que contiene:fuente
ACTUALIZACIÓN OCTUBRE 2016
Con la biblioteca de soporte v25.0.0, finalmente hay una implementación predeterminada de divisores horizontales y verticales básicos disponibles.
https://developer.android.com/reference/android/support/v7/widget/DividerItemDecoration.html
fuente
En realidad, esto no resuelve el problema, pero como solución temporal, puede establecer la propiedad useCompatPadding en la tarjeta en su diseño XML para que mida lo mismo que en las versiones anteriores a Lollipop.
fuente
Para aquellos que están buscando sólo para los espacios entre los elementos en el
RecyclerViewver a mi enfoque en el que se obtiene espacios iguales entre todos los elementos, excepto en los primeros y últimos artículos donde di un acolchado más grande. Solo aplico relleno a izquierda / derecha en horizontalLayoutManagery a arriba / abajo en verticalLayoutManager.dimens.xml
fuente
Agregue un margen a su vista, funcionó para mí.
Si solo desea agregar un espaciado igual y desea hacerlo en XML , simplemente establezca
paddingsu valorRecyclerViewy la misma cantidad dellayoutMarginelemento que infla en suRecyclerView, y deje que el color de fondo determine el color del espaciado.fuente
overscrollefecto al tirar al final de la lista tendrá un relleno innecesario aplicado cuando se aplique el rellenoRecyclerView<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" card_view:cardElevation="4dp" <!-- your item's XML here --> </android.support.v7.widget.CardView>Simplemente agregue un fondo al diseño de su elemento de reciclaje de la siguiente manera
Cree el siguiente shape_border.xml en la carpeta dibujable
Aquí está el resultado final: un RecyclerView con divisor.
fuente
parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1probablemente debería serparent.getChildAdapterPosition(view) > 0con eloutRect.bottom = mVerticalSpaceHeightdeveniroutRect.top = mVerticalSpaceHeight, debería ser la respuesta aceptada.Bifurqué el DividerItemDecoration de una esencia anterior y lo simplifiqué para que se adaptara a mi caso de uso, y también lo modifiqué para dibujar los divisores de la forma en que se dibujan en ListView, incluido un divisor después del último elemento de la lista. Esto también manejará animaciones verticales de ItemAnimator:
1) Agregue esta clase a su proyecto:
2) Agregue el decorador a su RecylerView:
fuente
En lugar de crear un
shape xmlcambio, la altura y el color del divisor. Puedes crear programáticamente comofuente
Tomado de una búsqueda en google, agregue este ItemDecoration a su
RecyclerView:fuente
Este enlace funcionó como un encanto para mí:
https://gist.github.com/lapastillaroja/858caf1a82791b6c1a36
Luego en tu actividad:
O esto si estás usando un fragmento:
fuente
mShowFirstDivider = false,mShowLastDivider = true, pero no va a funcionar. ¿Alguna idea de por qué?Podemos decorar los artículos usando varios decoradores adjuntos a la vista del reciclador, como la DividerItemDecoration:
Simplemente use lo siguiente ... tomado de la respuesta de EyesClear
} y luego use lo anterior de la siguiente manera
Esto mostrará divisores entre cada elemento dentro de la lista como se muestra a continuación:
Y para aquellos que buscan más detalles, pueden consultar esta guía Uso de RecyclerView _ CodePath Android Cliffnotes
Algunas respuestas aquí sugieren el uso de márgenes, pero el problema es que: si agrega los márgenes superior e inferior, aparecerán agregados entre los elementos y serán demasiado grandes. Si solo agrega cualquiera, no habrá margen en la parte superior o inferior de toda la lista. Si agrega la mitad de la distancia en la parte superior, la mitad en la parte inferior, los márgenes exteriores serán demasiado pequeños.
Por lo tanto, la única solución estéticamente correcta es el divisor que el sistema sabe dónde aplicar correctamente: entre elementos, pero no arriba o debajo de los elementos.
Por favor, hágame saber cualquier duda en los comentarios a continuación :)
fuente
DividerItemDecorationaspecto del código.Demasiado tarde, pero
GridLayoutManageryo uso esto:Este trabajo para cualquier recuento de tramo que tenga.
Ollie.
fuente
FlexboxLayoutManager?Puede agregar con programáticamente fácil.
Si su Administrador de diseño es Linearlayout, puede usar:
fuente
fuente
Siento que hay una necesidad de una respuesta simple basada en código que no use XML
fuente
Si desea agregar el mismo espacio para los elementos, la forma más simple es agregar el relleno superior + izquierdo para RecycleView y los márgenes derecho + inferior a los elementos de la tarjeta.
dimens.xml
list_item.xml
list.xml
fuente
He agregado una línea en el elemento de la lista como a continuación
1px dibujará la línea delgada.
fuente
El
RecyclerViewes un poco diferente delListView. En realidad,RecyclerViewnecesita unaListViewestructura similar. Por ejemplo, aLinearLayout. ElLinearLayouttiene parámetros para la división de cada elemento. En el siguiente código, tengo un conjuntoRecyclerViewdeCardViewobjetos dentro de aLinearLayoutcon un "relleno" que pondrá algo de espacio entre los elementos. Haz ese espacio realmente pequeño y obtendrás una línea.Aquí está la vista Recycler en recyclerview_layout.xml
Y así es como se ve cada elemento (y se muestra como dividido debido al androide: relleno en el diseño lineal que rodea todo) en otro archivo: cards_layout.xml
fuente
Una solución realmente fácil es usar RecyclerView-FlexibleDivider
Añadir dependencia:
Agregue a su vista de reciclador:
¡Y tu estas listo!
fuente
1.Una de las formas es mediante el uso de la vista de tarjeta y la vista de reciclador juntos , podemos agregar fácilmente efectos como divisor. ex. https://developer.android.com/training/material/lists-cards.html
2.y otro es agregando la vista como divisor a list_item_layout de la vista del reciclador .
fuente
Esto agregará espacio en la parte superior e inferior de cada elemento (o izquierda y derecha). Luego, puede configurarlo en su
recyclerView.SizeUtils.java
fuente