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?

mkso
fuente

Respuestas:

183

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

Alex.Semeniuk
fuente
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!)

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

tmho
fuente
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));
Annada
fuente
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

stef
fuente