Eliminar el divisor inferior de un ListView de Android


94

Tengo una altura fija ListView. Tiene un divisor entre los elementos de la lista, pero también muestra divisores después del último elemento de la lista.

¿Hay alguna forma de no mostrar un divisor después del último elemento ListView?

Respuestas:


183

Solo agregue android:footerDividersEnabled="false" a su descripción de ListView


29
Esto parece no funcionar a partir de 4.4.2. Puedo ejecutar literalmente la misma aplicación en mis muchos dispositivos de prueba (desde 2.3.7 hasta 4.4.2) y KitKat es el único en el que esto parece no tener ningún efecto ... ¿Alguna idea? No estoy agregando un pie de página o encabezado a mi ListView y lo he reproducido en dos dispositivos (Nexus 5 y HTC One M8).
Charles Madere

11
@ScootrNova Estoy usando 4.4.4, y cuando configuro la vista de lista layoutHeight="wrap_content", el divisor inferior desaparece.
Erhannis

1
Use background = @android: color / transparent, lo resolvió para mí
stef

Probé esta solución en Android 5.1 y 7.0 y ¡funciona perfectamente! Gracias hombre.
tomalf2

83

Como dijo @ScootrNova, esto parece comportarse de manera diferente (también conocido como buggy) en Android 4.4.x (no sé exactamente cuándo se presenta el problema)

Esto está relacionado con el caso específico de usar con padding+ clipToPadding="false"- en 4.4.x el pie de página se dibuja fuera de la vista, pero los clips al relleno lo revelan.

La solución que utilicé fue configurar el pie de página over-scroll ( android:overScrollFooter) en transparente, que de alguna manera funciona ...

Mi solución final (tenga en cuenta que android:footerDividersEnabledse mantiene por compatibilidad con versiones anteriores):

<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/activity_horizontal_margin"
    android:divider="@color/divider"
    android:dividerHeight="1px"
    android:clipToPadding="false"
    android:scrollbarStyle="outsideInset"
    android:overScrollFooter="@android:color/transparent"
    android:footerDividersEnabled="false"
    />

probado en un HTC One X con 4.1.1, un Nexus 5 con 4.4.4 y un Samsung Galaxy S5 con 4.4.2 (gracias a @ Dallas187). Parece que Lollipop también funciona. (¡gracias a los comentaristas!)


1
Confirmo que esta solución funciona en un Samsung Galaxy S5 con 4.4.2
Dallas187

1
Agregar me android:overScrollFootersirvió. Trabajando en 5.0.2 y 5.1.
Edison Spencer

de hecho, y creo que necesitará android:footerDividersEnabled="false"una compatibilidad posterior
Sam

18

Si desea hacer esto por código, es:

listView.setFooterDividersEnabled(false);

y si está utilizando un ListFragment, puede obtener la vista de lista mediante:

listFragment.getListView().setFooterDividersEnabled(false);

Solo comentado porque aparece como el número 1 en Google


2
Gracias por el código, me entristece cuando solo hay soluciones basadas en XML. Estoy transfiriendo una aplicación de iOS a Android, y hasta ahora creo que hacer todo esto en código fue mucho más rápido que si hubiera intentado convertirlo todo en un diseño basado en XML (como definí toda la interfaz de usuario de iOS en código en primer lugar ). Supongo que algún día tendré que entender todas estas cosas XML, pero no hoy :)
Herr Grumps

No funciona para mí en Pixel API 25, solo la sugerencia de Annada parece hacerlo.
Tbadams

12

Parece que la línea de abajo no funciona en el dispositivo lollypop.

listView.setFooterDividersEnabled(false);

Por lo tanto, debe usar este código a continuación para eliminar el divisor después del último elemento de la lista.

listView.setOverscrollFooter(new ColorDrawable(Color.TRANSPARENT));

Esta debería ser la respuesta aceptada. Solución simple, funcionó para mí en el primer disparo.
Samah

0

Usa background = @android: color / transparent. Funciona perfectamente. Todavía puede usar el fondo de su diseño de fila

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.