Espaciado entre listView Items Android

Intenté usar marginBottom en listView para hacer espacio entre listView Item, pero aún así los elementos están unidos.

¿Es posible? Si es así, ¿hay una manera específica de hacerlo?

Mi código está debajo

   

Mi elemento de lista personalizado:

    

¿Cómo puedo hacer espacios entre los elementos de la lista en este caso?

@Asahi casi dio en el clavo, pero solo quería agregar un poco de XML para cualquiera que esté flotando aquí más tarde a través de google:

  

Por alguna razón, valores como “10”, “10.0” y “10sp” son todos rechazados por Android para el valor dividerHeight . Quiere un número de coma flotante y una unidad, como “10.0sp”. Como señala @Goofyahead, también puede usar píxeles independientes de la pantalla para este valor (es decir, “10dp”).

Quizás la propiedad divider o dividerHeight de ListView puede resolver su problema.

Aunque la solución de Nik Reiman SI funciona, no me pareció una solución óptima para lo que quería hacer. Usar el divisor para establecer los márgenes tiene el problema de que el divisor ya no será visible, por lo que no puede usarlo para mostrar un límite claro entre sus elementos. Además, no agrega más “área en la que se puede hacer clic” a cada elemento, por lo tanto, si desea hacer que sus elementos se puedan cliquear y sus elementos sean delgados, será muy difícil para cualquiera hacer clic en un elemento ya que la altura agregada por el divisor no parte de un artículo.

Afortunadamente, encontré una solución mejor que le permite mostrar divisores y le permite ajustar la altura de cada elemento utilizando márgenes no rellenos. Aquí hay un ejemplo:

Vista de la lista

  

ListItem

    

Debería envolver su elemento ListView (digamos your_listview_item ) en algún otro diseño, por ejemplo, LinearLayout y agregar margen a your_listview_item :

    

De esta forma, también puede agregar espacio, si es necesario, a la derecha e izquierda del elemento ListView .

Mi solución para agregar más espacio, pero mantener la línea horizontal, era agregar divider.xml en la carpeta res/drawable y definir la forma de la línea dentro de:

divider.xml

 < ?xml version="1.0" encoding="utf-8"?>    

luego en mi lista, hago referencia a mi divisor de la siguiente manera:

   

fíjate en el android:dividerHeight="16.0dp" al boost y disminuir esta altura, básicamente estoy agregando más relleno en la parte superior e inferior de la línea divisoria.

Utilicé esta página como referencia: http://developer.android.com/guide/topics/resources/drawable-resource.html#stroke-element

Si desea mostrar un divisor con márgenes y sin estirarlo, use InsetDrawable (el tamaño debe tener un formato, sobre el cual dijo @Nik Reiman):

Vista de la lista:

  

@ drawable / separator_line:

 < ?xml version="1.0" encoding="utf-8"?>       

Puedes usar:

 android:divider="@null" android:dividerHeight="3dp" 

ejemplo:

  

Me di cuenta de que ya se había seleccionado una respuesta, pero solo quería compartir lo que terminó funcionando para mí cuando me encontré con este problema.

Tenía un ListView donde cada entrada en el listView se definía por su propio diseño, similar a lo que Sammy publicó en su pregunta. Probé el enfoque sugerido de cambiar la altura del divisor, pero eso no terminó pareciendo demasiado bonito, incluso con un divisor invisible. Después de algunos experimentos, simplemente agregué un android:paddingBottom="5dip" al último elemento de diseño de TextView en el archivo XML que define las entradas individuales de ListView.

Esto terminó dándome exactamente lo que estaba tratando de lograr mediante el uso de android:layout_marginBottom . Encontré esta solución para producir un resultado más estético que tratar de boost la altura del divisor.

La solución más simple con el código existente de OP (los elementos de la lista ya tienen el relleno) es agregar el siguiente código:

 listView.setDivider(new ColorDrawable(Color.TRANSPARENT)); //hide the divider listView.setClipToPadding(false); // list items won't clip, so padding stays 

Esta respuesta SO me ayudó.

Nota: Es posible que el error se deba a que el elemento de la lista se está reciclando demasiado pronto en plataformas anteriores, como se ha pedido aquí .

Para mi aplicación, lo he hecho de esta manera

    

y este es el resultado

enter image description here

simplemente android: divider = “@ null” y proporcionar altura al divisor hizo por mí.

En lugar de dar margen, debe dar relleno:

   

O

   
   

y establezca paddingTop , paddingBottom y dividerHeight en el mismo valor para obtener el mismo espacio entre todos los elementos y el espacio en la parte superior e inferior de la lista.

clipToPadding en false para permitir que las vistas se clipToPadding en esta área acolchada.

Establecí el divider en @null para eliminar las líneas entre los elementos de la lista.

También una forma más de boost el espacio entre los elementos de la lista es que agrega una vista vacía a su código de adaptador al proporcionar el atributo layout_height con el espaciado que necesita. Por ejemplo, para boost el espacio entre los elementos de la lista, agregue esta vista ficticia (vista vacía) al final de los elementos de la lista.

  

Esto proporcionará un espacio inferior de 15 dp entre los elementos de la lista. Puede agregar esto directamente si el diseño principal es LinearLayout y la orientación es vertical o tome los pasos apropiados para otro diseño. Espero que esto ayude 🙂

solo tiene que hacer que el fondo sea transparente del divisor de listas y hacer que la altura sea la necesaria.

  

Encontré una solución no tan buena para esto en caso de que esté utilizando un HorizontalListView, ya que los divisores no parecen funcionar con él, pero creo que funcionará de cualquier manera para el ListView más común.

Solo agregando:

  

en la vista inferior del diseño que infle en la clase de adaptador se creará un espaciado entre los elementos

Para dar espacio entre las vistas dentro de una lista, usa relleno en tus vistas de inflado.

Puede usar android:paddingBottom="(number)dp" && android:paddingTop="(number)dp" en su vista o vistas que está inflando dentro de su lista de lista.

La solución divisora ​​es solo una solución, porque algún día, cuando quieras usar un color divisor (ahora mismo es transparente), verás que la línea divisora ​​se ha estirado.

Muchas de estas soluciones funcionan. Sin embargo, si lo único que desea es poder establecer el margen entre los elementos, el método más sencillo que he encontrado es envolver su elemento, en su caso, CheckedTextView, en un LinearLayout y poner el formato de margen para el elemento en eso, no el diseño de la raíz. Asegúrese de darle una identificación a este diseño de envoltura y créelo junto con su CheckedTextView en su adaptador.

Eso es. En efecto, está instanciando el margen en el nivel de elemento para ListView. Porque ListView no conoce el diseño de ningún elemento, solo su adaptador sí. Esto básicamente infla la parte del diseño del elemento que se estaba ignorando antes.