373 votos

Espacio entre elementos de listView Android

Intenté usar marginBottom en el listView para hacer espacio entre los ítems del listView, pero aún así los ítems están pegados.

¿Es posible? En caso afirmativo, ¿hay alguna forma específica de hacerlo?

Mi código es el siguiente

<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 la 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?

836voto

Nik Reiman Puntos 16156

@Asahi ha dado prácticamente en el clavo, pero sólo quería añadir un poco de XML para quien quizá llegue 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, valores como "10", "10.0" y "10sp" son rechazados por Android para el dividerHeight valor. Quiere un número de punto flotante y una unidad, como "10.0sp". Como señala @Goofyahead, también puede utilizar píxeles independientes de la pantalla para este valor (es decir, "10dp").

62voto

Asahi Puntos 5938

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

44voto

idunnololz Puntos 608

Aunque la solución de Nik Reiman SÍ funciona, no me pareció una solución óptima para lo que quería hacer. El uso del divisor para establecer los márgenes tiene el problema de que el divisor ya no será visible, por lo que no se puede utilizar para mostrar un límite claro entre los elementos. Además, no añade más "área clicable" a cada elemento, por lo que si quieres que tus elementos sean clicables y tus elementos son delgados, será muy difícil que alguien haga clic en un elemento, ya que la altura añadida por el divisor no es parte de un elemento.

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

ListView

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

ListItem

<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>

17voto

Kailash Puntos 2170

Debe envolver su ListView elemento (digamos your_listview_item ) en alguna otra disposición, por ejemplo LinearLayout y añadir un 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 manera también se puede añadir espacio, si es necesario, a la derecha y a la izquierda del ListView artículo.

8voto

LionKing Puntos 336

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

ListView:

<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>

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X