Ответ 1
Ответ очень прост: вы должны изменить android:layout_height="wrap_content"
на android:layout_height="match_parent"
в 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>
Однако я обнаружил, что после последнего элемента выделяется разделитель , если я добавлю еще одно представление в список 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>
Почему listview ведет себя так? Как я могу получить разделитель после последнего элемента в макете, который содержит только список?
Ответ очень прост: вы должны изменить android:layout_height="wrap_content"
на android:layout_height="match_parent"
в ListView
.
Вероятно, вы можете догадаться, почему это происходит.
Вы пробовали этот?
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" />
Добавьте пустой вид сверху (и/или снизу), чтобы создать разделитель сверху (или снизу)
myList.addHeaderView(new View(context));
myList.addFooterView(new View(context));
У меня есть хак, который работает вокруг этой проблемы. Поскольку последний разделитель отображается только в том случае, если другое представление следует за списком, можно сделать это второе представление невидимым, установив его 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>
Я делаю что-то похожее на то, что описывает @Natix, но вместо того, чтобы возиться с содержащим макетом списка, я просто добавляю пустое представление в виде нижнего колонтитула в списке через ListView.addFooterView()
Кажется несколько иным, когда отображается ваш список, если вы его кодируете так. Но даже вы можете следовать этому тоже.
Сначала определите стиль с именем 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>
Надеюсь, это поможет. Кстати, причина неопределенная и даже однажды я искал это, и я последовал этому пути, который я объяснил выше.