Espaciado entre los elementos de listView Android

Intenté utilizar marginBottom en el listView para hacer el espacio entre el artículo de listView, pero todavía los artículos se atan juntos.

¿Es posible? En caso afirmativo, ¿existe una forma específica de hacerlo?

Mi código está abajo

<LinearLayout android:id="@+id/alarm_occurences" android:layout_width="fill_parent" android:orientation="vertical" android:layout_height="fill_parent" android:background="#EEEEFF" xmlns:android="http://schemas.android.com/apk/res/android"> <ListView android:id="@+id/occurences" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> 

Mi elemento de lista personalizada:

 <com.android.alarm.listItems.AlarmListItem xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/alarm_item_background" android:layout_marginBottom="10dp" > <CheckedTextView android:id="@android:id/text1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:checkMark="?android:attr/listChoiceIndicatorMultiple" android:textSize="20sp" android:textStyle="bold" android:typeface="serif" android:padding="10dp" /> </com.android.alarm.listItems.AlarmListItem> 

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

@Asahi casi golpeó el clavo en la cabeza, pero sólo quería añadir un poco de XML para cualquiera tal vez flotando aquí más tarde a través de google:

 <ListView android:id="@+id/MyListView" android:layout_height="match_parent" android:layout_width="match_parent" android:divider="@android:color/transparent" android:dividerHeight="10.0sp"/> 

Por alguna razón, los valores como "10", "10.0" y "10sp" son rechazados por Android para el valor dividerHeight . Quiere un número de punto flotante y una unidad, como "10.0sp". Como las notas @Goofyahead, también puede utilizar píxeles independientes de la pantalla para este valor (es decir, "10dp").

Tal vez la propiedad divider o dividerHeight de ListView puede resolver su problema.

Aunque la solución de Nik Reiman funciona, me pareció que no era una solución óptima para lo que quería hacer. El uso del divisor para establecer los márgenes tuvo el problema de que el divisor ya no estará visible, por lo que no puede utilizarlo para mostrar un límite claro entre los elementos. Además, no agrega más "área de clic" a cada elemento, por lo tanto, si desea hacer que sus elementos se puedan hacer clic y sus elementos son delgados, será muy difícil para cualquiera hacer clic en un elemento ya que la altura añadida por el divisor no es Parte de un artículo.

Afortunadamente, he encontrado una mejor solución que le permite mostrar tanto divisores y le permite ajustar la altura de cada elemento utilizando no márgenes, pero el relleno. Aquí hay un ejemplo:

Vista de la lista

 <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_parent" /> 

Producto en la lista

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="10dp" android:paddingTop="10dp" > <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:text="Item" android:textAppearance="?android:attr/textAppearanceSmall" /> </RelativeLayout> 

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

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent"> <your_listview_item android:id="@+id/list_item" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="5dp" android:layout_marginBottom="5dp" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" ... ... /> </LinearLayout> 

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

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

Vista de la lista:

 <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:cacheColorHint="#00000000" android:divider="@drawable/separator_line" android:dividerHeight="10.0px"/> 

@ Drawable / separator_line:

 <?xml version="1.0" encoding="utf-8"?> <inset xmlns:android="http://schemas.android.com/apk/res/android" android:insetLeft="5.0px" android:insetRight="5.0px" android:insetTop="8.0px" android:insetBottom="8.0px"> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <gradient android:startColor="@color/colorStart" android:centerColor="@color/colorCenter" android:endColor="@color/colorEnd" android:type="linear" android:angle="0"> </gradient> </shape> </inset> 

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

Divider.xml

 <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke android:width="1px" android:color="@color/nice_blue" /> </shape> 

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

 <ListView android:id="@+id/listViewScheduledReminders" android:layout_width="match_parent" android:layout_height="0dip" android:layout_marginBottom="@dimen/mediumMargin" android:layout_weight="1" android:divider="@drawable/divider" android:dividerHeight="16.0dp" android:padding="@dimen/smallMargin" > </ListView> 

Observe el android:dividerHeight="16.0dp" aumentando y disminuyendo esta altura Estoy básicamente añadiendo más relleno en la parte superior e inferior de la línea divisora.

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

Puedes usar:

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

ejemplo:

 <ListView android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/listView" android:layout_gravity="center_horizontal" android:dividerHeight="3dp" android:divider="@null" android:clickable="false"/> 

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

Tenía una listaVer donde cada entrada en el listView se definía por su propio diseño, similar a lo que Sammy publicó en su pregunta. Intenté el acercamiento 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 android:paddingBottom="5dip" un android:paddingBottom="5dip" al último elemento de layout de TextView en el archivo XML que define las entradas listView individuales.

Esto terminó dándome exactamente lo que estaba tratando de lograr a través del uso de android:layout_marginBottom . He encontrado esta solución para producir un resultado más estéticamente agradable que tratar de aumentar la altura del divisor.

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

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

Esta respuesta me ayudó.

Nota: Es posible que se enfrente un error del elemento de lista que se recicla demasiado pronto en plataformas anteriores, como se ha preguntado aquí .

En lugar de dar margen, debe dar relleno:

 <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:padding="5dp" > </ListView> 

O

 <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:paddingTop="2dp" android:paddingLeft="1dp" android:paddingRight="1dp" android:paddingBottom="2dp" android:paddingStart="0dp" android:paddingEnd="0dp" > </ListView> 

Para mi aplicación, he hecho de esta manera

  <ListView android:id="@+id/staff_jobassigned_listview" android:layout_width="match_parent" android:layout_height="match_parent" android:divider="@null" android:dividerHeight="10dp"> </ListView> 

Y esto es resultado

Introduzca aquí la descripción de la imagen

Sólo android: divider = "@ null" y proporcionar la altura de la división hizo por mí.

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

 <View android:layout_width="match_parent" android:layout_height="15dp"/> 

Así que esto proporcionará un espaciado inferior de 15 dp entre los elementos de vista de lista. Puede añadir directamente esto si la disposición principal es LinearLayout y la orientación es vertical o tomar las medidas apropiadas para otro diseño. Espero que esto ayude 🙂

 <ListView android:clipToPadding="false" android:paddingTop="10dp" android:paddingBottom="10dp" android:dividerHeight="10dp" android:divider="@null" android:layout_width="match_parent" android:layout_height="match_parent"> </ListView> 

Y ajuste paddingTop , paddingBottom y dividerHeight al mismo valor para obtener un espaciado igual entre todos los elementos y el espacio en la parte superior e inferior de la lista.

clipToPadding a false para dejar las vistas ser dibujado en este área acolchada.

Puse el divider a @null para quitar las líneas entre los elementos de la lista.

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.

Sólo añadiendo:

 <View android:layout_marginBottom="xx dp/sp"/> 

En la vista inferior del diseño que infla en la clase del adaptador creará el espacio entre los elementos

Con el fin de dar el espacio entre las vistas dentro de un listView por favor utilice relleno en su inflar vistas.

Puede usar android:paddingBottom="(number)dp" && android:paddingTop="(number)dp" en su vista o vistas que se infla dentro de su listview.

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

Usted apenas necesita hacer el fondo transparente del divisor de la lista y hacer la altura según su boquete necesitado.

 <ListView android:id="@+id/custom_list" android:layout_height="match_parent" android:layout_width="match_parent" android:divider="#00ffffff" android:dividerHeight="20dp"/> 

Muchas de estas soluciones funcionan. Sin embargo, si todo lo que quieres es poder establecer el margen entre los elementos el método más simple que he venido con es envolver su elemento – en su caso el CheckedTextView – en un LinearLayout y poner su margen de formato para el elemento en que, No el diseño raíz. Asegúrese de dar a este diseño de empaquetado un id y crearlo junto con su CheckedTextView en su adaptador.

Eso es. En efecto, está instanciando el margen en el nivel de elemento para el ListView. Debido a que el ListView no sabe acerca de cualquier diseño de elementos – sólo su adaptador lo hace. Esto básicamente infla la parte del diseño del elemento que se estaba ignorando antes.

  • ListView + BaseAdapter - cómo notificar sobre el cambio en un solo artículo?
  • La fila ListView no se puede hacer clic después de agregar el botón a la fila
  • EditText en ListView pierde foco cuando se presiona en Android 4.x
  • Android personalizado listview muy lento al desplazarse
  • Listview mostrar los datos de la base de datos en android
  • Desactivar desplazamiento de Android y hacer clic para listview
  • Destacar comportamiento misterioso en ListView
  • Listview en android no actualizó la vista hasta que se arrastró
  • Reutilización de vistas en Android Listview con 2 diseños diferentes
  • ¿Puedo hacer que un elemento ListView no sea seleccionable?
  • Listview normal y coloque el estilo de fondo en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.