Удалите нижний разделитель 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));
Annada
источник
Это должен быть принятый ответ. Простое решение, сработало для меня с первого раза.
Сама
0

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

Стеф
источник