Удалите нижний разделитель Android ListView


94

У меня фиксированный рост ListView. Он имеет разделитель между элементами списка, но также отображает разделители после последнего элемента списка.

Есть ли способ не отображать разделитель после последнего элемента ListView?

Ответы:


183

Просто добавьте android:footerDividersEnabled="false" в описание ListView


29
Кажется, это больше не работает, начиная с 4.4.2. Я могу запускать буквально одно и то же приложение на многих своих тестовых устройствах (начиная с 2.3.7 и заканчивая 4.4.2), и только KitKat, похоже, не имеет никакого эффекта ... Есть идеи? Я не добавляю нижний колонтитул или заголовок в свой ListView, и я воспроизвел их на двух устройствах (Nexus 5 и HTC One M8).
Charles Madere

11
@ScootrNova Я использую 4.4.4, и когда я устанавливаю список layoutHeight="wrap_content", нижний разделитель исчезает.
Erhannis

1
Используйте background = @android: color / transparent, решено для меня
stef

пробовал это решение на android 5.1 и 7.0, и оно отлично работает! Спасибо чувак.
tomalf2

83

Как сказал @ScootrNova, похоже, что это ведет себя по-другому (иначе багги) в android 4.4.x (я точно не знаю, когда возникла проблема)

Это связано с конкретным случаем использования padding+ clipToPadding="false"- в 4.4.x нижний колонтитул отрисовывается за пределами представления, но клипы к отступу показывают его.

Решение, которое я использовал, заключалось в том, чтобы установить нижний колонтитул over-scroll ( android:overScrollFooter) на прозрачный, что как-то работает ...

Мое окончательное решение (обратите внимание, что android:footerDividersEnabledоно сохранено для обратной совместимости):

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

протестирован на HTC One X под управлением 4.1.1, Nexus 5 под управлением 4.4.4 и Samsung Galaxy S5 под управлением 4.4.2 (спасибо @ Dallas187). Кажется, тоже работает Lollipop. (спасибо комментаторам!)


1
Просто подтверждаю, что это решение работает на Samsung Galaxy S5 под управлением 4.4.2
Dallas187,

1
Добавление android:overScrollFooterпомогло мне. Работает на 5.0.2 и 5.1.
Эдисон Спенсер

действительно, и я считаю, что вам понадобится android:footerDividersEnabled="false"обратная связь
Сэм,

18

Если вы хотите сделать это с помощью кода, это:

listView.setFooterDividersEnabled(false);

и если вы используете ListFragment, вы можете получить список:

listFragment.getListView().setFooterDividersEnabled(false);

Прокомментировано только потому, что это номер 1 в Google


2
Спасибо за код - мне грустно, когда есть только решения на основе XML! Я портирую приложение с iOS на Android, и до сих пор я думаю, что делать все это в коде было намного быстрее, чем если бы я пытался преобразовать все это в макет на основе XML (поскольку я определил весь пользовательский интерфейс iOS в коде в первую очередь ). Полагаю, однажды мне придется разобраться со всем этим XML, но не сегодня :)
Herr Grumps

У меня не работает Pixel API 25, похоже, только предложение Аннады.
Тбадамс

12

Кажется, что строка ниже не работает на устройстве lollypop.

listView.setFooterDividersEnabled(false);

Поэтому необходимо использовать приведенный ниже код, чтобы удалить разделитель после последнего элемента в списке.

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

Это должен быть принятый ответ. Простое решение, сработало для меня с первого раза.
Сама

0

Используйте background = @android: color / transparent. Прекрасно работает. Вы по-прежнему можете использовать фон макета строки

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.