Сепаратор (разделитель) после последнего элемента ListView

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

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

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" />
</RelativeLayout>

enter image description here

Однако я обнаружил, что после последнего элемента выделяется разделитель , если я добавлю еще одно представление в список listview и задаю атрибут android:layout_above для списка.

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

    <ListView
        android:id="@android:id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/bottom"
        android:layout_alignParentTop="true" />

    <TextView
        android:id="@+id/bottom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@android:color/holo_blue_dark"
        android:text="Bottom" />
</RelativeLayout>

enter image description here

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

Ответ 1

Ответ очень прост: вы должны изменить android:layout_height="wrap_content" на android:layout_height="match_parent" в ListView.

Вероятно, вы можете догадаться, почему это происходит.

Ответ 2

Вы пробовали этот?

android:footerDividersEnabled="true"

если не попробовать это

<View
android:background="#00ff00"
android:layout_width="fill_parent"
android:layout_height="3dp"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/YOUR_LIST_ID" />

Ответ 3

Добавьте пустой вид сверху (и/или снизу), чтобы создать разделитель сверху (или снизу)

myList.addHeaderView(new View(context));
myList.addFooterView(new View(context));

Ответ 4

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

Это все еще взломать, но он делает последний вид делителя совместимым с другим, поэтому лучше попытаться вручную создать горизонтальную линию, пытаясь угадать нужный цвет и размеры.

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

    <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/invisible"
        android:layout_alignParentTop="true" />

    <View
        android:id="@+id/invisible"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_alignParentBottom="true" />    
</RelativeLayout>

Ответ 5

Я делаю что-то похожее на то, что описывает @Natix, но вместо того, чтобы возиться с содержащим макетом списка, я просто добавляю пустое представление в виде нижнего колонтитула в списке через ListView.addFooterView()

Ответ 6

Кажется несколько иным, когда отображается ваш список, если вы его кодируете так. Но даже вы можете следовать этому тоже.

Сначала определите стиль с именем Line

<style name="Line">
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">2px</item>
    <item name="android:background">@color/white</item>
</style>

//В этом стиле вы можете изменить высоту строки в соответствии с вашим требованием.

Если вы хотите использовать указанную выше строку, вы можете объявить ее так, как это, в вашем XML файле.

<LinearLayout
android:orientation = "vertical"
.......................
............................>
 <ListView
        android:id="@android:id/list"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
         />


<View
        style="@style/Line"/>

</LinearLayout>

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

 <LinearLayout
    android:orientation = "vertical"
    .......................
    ............................>
     <ListView
            android:id="@android:id/list"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
             />
<View
    android:layout_width="fill_parent"
        android:layout_height="1px"
        android:background="#20b2aa" />

</LinearLayout>

Надеюсь, это поможет. Кстати, причина неопределенная и даже однажды я искал это, и я последовал этому пути, который я объяснил выше.