¿Cómo agregar espacio entre elementos en la vista de lista de Android?

Me gustaría agregar relleno entre CADA elemento en una vista de lista, pero me gustaría mantener el divisor predeterminado porque creo que es estéticamente agradable. Cualquier cosa más ancha se ve feo.

Actualmente tengo:

<com.example.practice.MyListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:drawSelectorOnTop="false"
    android:layout_below="@id/name" />

Ahora, he intentado usar un divisor transparente, y esto logra obtener el espacio que quiero, pero luego no veo la pequeña línea. Y si no uso un divisor transparente entonces tengo una línea enorme, gruesa y fea. Quiero mantener la línea predeterminada que se muestra y solo agregar algo de espacio en la parte superior de cada elemento de vista de lista.

preguntado el 15 de mayo de 13 a las 04:05

Haga el relleno en sus elementos de vista de lista xml -

Esto solo agregará relleno en la parte superior e inferior de toda la vista de lista. Quiero que ocurra dentro de cada elemento de vista de lista. -

¿Tiene xml para su elemento de vista de lista? -

Si tiene un diseño separado que representa una fila, intente agregarle relleno. -

No estamos hablando de su vista de lista allí arriba. estamos hablando del diseño de su fila en la lista. Si usa android.layout.simple.... entonces escriba su propio diseño y agregue el relleno allí. -

7 Respuestas

Entonces no serías capaz de lograr lo que quieres tan simple como eso.

Paso uno: configura el divisor como transparente y haz que la altura sea un poco más grande:

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="8dp"/>

Paso dos: para lograr el efecto de 'línea pequeña', puede agregar un dibujo personalizado como fondo del elemento de vista de lista, digamos que el elemento de vista de lista se define como 'list_item.xml':

<?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="match_parent"
<-- Add a Custom background to the parent container of the listview items -->
android:background="@drawable/list_item_selector"
android:orientation="vertical" >
<-- Rest of the item layout -->
</LinearLayout>

Por supuesto, ese artículo puede ser lo que quieras que sea, el mío es:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<item>
  <shape 
    android:shape="rectangle">
        <stroke android:width="1dp" android:color="@color/bg_gray" />
        <solid android:color="@android:color/white" />
    </shape>
</item>
<item android:bottom="1dp"> 
    <shape 
        android:shape="rectangle">
        <stroke android:width="1dp" android:color="#FFDDDDDD" />
        <solid android:color="#00000000" />
    </shape>
</item>
</layer-list>

Pero eso deshabilitaría el efecto 'Holo Selector', donde cada vez que hace clic o resalta un elemento en la vista de lista, hay un color Holo Blue dibujado sobre él, es por eso que si nota que en el fondo del elemento de la lista no usamos una lista de capas dibujable, usamos un selector llamado 'list_item_selector'.

Aquí está el selector, que usa la lista de capas dibujable cuando no se presiona, y usa un color Holo-azul cuando se presiona:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item 
    android:state_pressed="false"
    android:drawable="@drawable/list_item_bg2"        
    />
 <item android:state_pressed="true"
    android:drawable="@color/holo_blue"
    />
</selector>

EDITAR para comentario

Absolutamente posible, puede definir una altura establecida para los elementos de vista de lista; sin embargo, se recomienda establecer una altura mínima, en lugar de una altura predefinida que nunca cambia.

Digamos que este es el diseño de mi elemento de lista:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<ImageView
    android:id="@+id/grid_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:src="@drawable/ic_launcher" />

<TextView
    android:id="@+id/grid_text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:gravity="center_vertical"
    android:layout_toRightOf="@+id/grid_image"
    android:minHeight="48dp"
    android:padding="8dp"
    android:textIsSelectable="false" />

</RelativeLayout>

Todo lo necesario sería,

Paso uno: defina la altura mínima o la altura máxima, según prefiera, en el archivo dimens.xml contenido en la carpeta values/. ¿Por qué? Porque la altura definitivamente debe cambiar según el diseño, y puede definir diferentes dimens.xml para cada densidad de dispositivo.

en el dimens.xml, diga:

<resources>

<!-- List Item Max and Min Height -->

    <dimen name="list_item_min_height">48dp</dimen>
    <dimen name="list_item_max_height">96dp</dimen>
    <dimen name="list_item_set_height">64dp</dimen>

</resources>

Y luego use cualquier valor para el padre LinearLayout de la disposición del elemento de su lista.

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/list_item_min_height" >

Y eso es todo por ese tema, ahora para centrar el texto, es aún más simple:

  • Si está utilizando un TextView y está envuelto en un RelativeLayout, use: android:layout_centerVertical="true"

  • Si está utilizando un LinearLayout, utilice: android:layout_gravity="center_vertical"

y une eso con: NOTA Esto solo funciona si no configuró la altura en wrap_content, de lo contrario, es irrelevante.

  android:gravity="center_vertical"

Espero que ayude.

contestado el 15 de mayo de 13 a las 04:05

Me gusta la idea. ¿Qué tal agregar un tamaño predeterminado para cada artículo? ¿Y hacer que el texto vaya al centro? ¿Sería eso posible? - gusano

¡Buen material! Gracias por la ayuda. - gusano

¿Qué tal establecer un parche de 9 como divisor dibujable y usar una altura de divisor adecuada para el espacio deseado? ¿No sería eso un mucho más solución más simple y elegante? De esa manera, no tiene que perder el tiempo con el selector y los fondos de los elementos. - MH.

No sé si entiendo bien tu pregunta. Si desea que el divisor sea transparente para que vea una parte del fondo entre cada ListView por lo que da una especie de efecto 3D al hacer scroll. Podrías hacerlo de esta manera:

En su list_item xml dar el LinearLayout el color de fondo que quieras por ejemplo:

<LinearLayout 
android:id="@+id/listItem"
android:layout_width="match_parent"
android:layout_height="match_parent"    
android:padding="4dip"
android:orientation="horizontal"
android:background="#FFFFFF"
>

Entonces da tu ListView un color de fondo como este:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragmentListView"
android:layout_width="match_parent" 
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="8dip"
android:background="#0000FF"
android:cacheColorHint="@android:color/transparent"
android:drawSelectorOnTop="true"
/>

Ahora tu ListView se desplaza sobre tu fondo

Espero que esto sea lo que querías.

Respondido el 08 de diciembre de 13 a las 12:12

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

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

Por lo tanto, esto proporcionará un espaciado inferior de 15 dp entre los elementos de la vista de lista. Puede agregar esto directamente si el diseño principal es LinearLayout y la orientación es vertical o tomar los pasos adecuados para otro diseño. Espero que esto ayude :-)

Respondido 28 ago 15, 09:08

simplemente puede usar el divisor

ver el siguiente ejemplo

  <ListView
    android:id="@+id/activity_main_listview_data"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:divider="@android:color/transparent"
    android:dividerHeight="10dp"
    />

aquí, en android:divider puede establecer el color o hacerlo transparente y en dividerHeight para agregar espacio entre elementos.

respondido 14 mar '17, 08:03

Esta es una solución para aquellos de ustedes que hacen no quiere que el divisor sea visible y todavía quiere agregar más espacio. Para deshacerse del divisor por completo, configúrelo en @null y configure dividerHeight en 0dp. Aquí hay un ListView genérico de minas.

<ListView
    android:id="@+id/myListView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ff0000"
    android:divider="@null"
    android:dividerHeight="0dp"
    android:layout_alignLeft="@+id/txtMake"
    android:layout_below="@+id/txtMake"
    android:fadeScrollbars="false"
    android:scrollbarThumbVertical="@drawable/scroll_bar_color"
    android:scrollbarStyle="outsideInset" >
</ListView>

A continuación, vaya al archivo xml en el que usa el adaptador para completar su vista de lista. Vaya a su contenedor (Ejemplo RelativeLayout...) y simplemente agregue lo siguiente.

    android:layout_marginTop="15dp"

Esto en realidad agregará espacio para aquellos de ustedes que no están usando el divisor. A diferencia del relleno que solo aumenta el tamaño de la caja, esto aumentará la distancia entre cada elemento.

Respondido el 13 de diciembre de 13 a las 08:12

Dentro del ListView etiqueta en XMLfile agregar un dividerHeight etiquete y asígnele un valor (el espacio que desea entre los elementos de su lista).

Le proporcionaría un espacio adecuado entre los elementos de la lista.

Código:

<ListView
    android:id="@+id/listid"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent"
    android:divider="@drawable/divi"
    android:dividerHeight="60dp"></ListView>

Ahora cree un archivo XML dibujable (en este caso, el nombre es divi). En su interior agrega un stroke etiqueta y dale un ancho y eso sería suficiente.

Código:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">
    <stroke
        android:width="1dp"
        android:color="#000000"
         />
</shape>

Respondido el 21 de junio de 17 a las 13:06

android:layout_width="match_parent"
android:textColor="@color/colorPrimary"
android:textSize="30dp"
android:layout_height="wrap_content"

Complete Código aquí

contestado el 04 de mayo de 20 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.