Android ListView Divider
У меня есть этот код:
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cashItemsList"
android:cacheColorHint="#00000000"
android:divider="@drawable/list_divider"></ListView>
где @drawable/list_divider
:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke
android:width="1dp"
android:color="#8F8F8F"
android:dashWidth="1dp"
android:dashGap="1dp" />
</shape>
но я не вижу никакого разделителя.
Ответы
Ответ 1
Люди, вот почему вы должны использовать 1px вместо 1dp или 1dip: если вы укажете 1dp или 1dip, Android уменьшит это. На устройстве с разрешением 120 точек на дюйм это становится примерно чем 0,75px переведенным, который округляется до 0. На некоторых устройствах это преобразуется в 2-3 пикселя, и обычно оно выглядит уродливым или неаккуратным.
Для разделителей 1px - это правильная высота, если вы хотите делитель на 1 пиксель и является одним из исключений для правила "все должно быть окунуло". Это будет 1 пиксель на всех экранах. Кроме того, 1px обычно выглядит лучше на hdpi и выше экранах
"Это не 2012 больше" редактирование: вам может потребоваться переключиться на dp/dip, начиная с определенной плотности экрана
Ответ 2
Это обходной путь, но работает для меня:
Создан res/drawable/divider.xml следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<gradient android:startColor="#ffcdcdcd" android:endColor="#ffcdcdcd" android:angle="270.0" />
</shape>
И в styles.xml для элемента listview я добавил следующие строки:
<item name="android:divider">@drawable/divider</item>
<item name="android:dividerHeight">1px</item>
Важная роль заключалась в том, чтобы включить эту настройку 1px. Разумеется, применимый градиент использует градиент (с 1px) и это не оптимальное решение. Я пробовал использовать инсульт, но не получил его на работу. (Кажется, вы не используете стили, поэтому просто добавьте атрибут android: dividerHeight = "1px" для ListView.
Ответ 3
Добавьте android:dividerHeight="1px"
, и он будет работать:
<ListView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cashItemsList"
android:cacheColorHint="#00000000"
android:divider="@drawable/list_divider" android:dividerHeight="1px"></ListView>
Ответ 4
Проблема, с которой вы сталкиваетесь, связана с тем, что вам не хватает андроида: dividerHeight, который вам нужен, и тот факт, что вы пытаетесь указать вес линии в своем чертеже, что вы не можете сделать с разделители по какой-то нечетной причине. По сути, чтобы ваш пример работал, вы могли бы сделать что-то вроде следующего:
Создайте свой drawable как прямоугольник или линию, либо вы просто не можете пытаться установить на нем какие-либо измерения, поэтому:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
<stroke android:color="#8F8F8F" android:dashWidth="1dp" android:dashGap="1dp" />
</shape>
ИЛИ
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<solid android:color="#8F8F8F"/>
</shape>
Затем создайте пользовательский стиль (только предпочтение, но мне нравится использовать его повторно)
<style name="dividedListStyle" parent="@android:style/Widget.ListView">
<item name="android:cacheColorHint">@android:color/transparent</item>
<item name="android:divider">@drawable/list_divider</item>
<item name="android:dividerHeight">1dp</item>
</style>
Наконец, объявите свой список в пользовательском стиле:
<ListView
style="@style/dividedListStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/cashItemsList">
</ListView>
Я предполагаю, что вы знаете, как использовать эти фрагменты, если не дайте мне знать. В основном ответ на ваш вопрос заключается в том, что вы не можете установить толщину разделителя в растягиваемом, вы должны оставить там ширину undefined и использовать android: dividerHeight, чтобы установить его вместо.
Ответ 5
Из документа:
public void setDivider(Drawable divider) on ListView
/**
* Sets the drawable that will be drawn between each item in the list. If the drawable does
* not have an intrinsic height, you should also call {@link #setDividerHeight(int)}
*
* @param divider The drawable to use.
*/
Похоже, что setDividerHeight()
должен вызываться для того, чтобы разделитель отображался, если он не имеет собственной высоты
Ответ 6
Ваш @drawable/list_divide
должен выглядеть так:
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke
android:height="1dp"
android:color="#8F8F8F"
android:dashWidth="1dp"
android:dashGap="1dp" />
</shape>
В вашей версии вы предоставили android:width="1dp"
, просто замените его на android:height="1dp"
и он должен работать!
Ответ 7
Из doc:
расположение файла:
res/drawable/filename.xml
имя файла используется как идентификатор ресурса.
в принципе, вам нужно поместить файл с именем list_divider.xml
в res/drawable/
, чтобы вы могли получить к нему доступ как R.drawable.list_divider
; если вы можете получить к нему доступ таким образом, вы можете использовать android:divider="@drawable/list_divider"
в XML для ListView
.
Ответ 8
Некоторые люди могут испытывать сплошную линию. Я обошел это, добавив android:layerType="software"
в представление, ссылающееся на drawable.
Ответ 9
Андроидные документы предупреждают о исчезновении вещей из-за ошибки округления... Возможно, попробуйте dp вместо px и, возможно, сначала попробуйте > 1, чтобы увидеть, является ли это проблемой округления.
см. http://developer.android.com/guide/practices/screens_support.html#testing
для раздела "Изображения с высотой и шириной 1 пикселя"
Ответ 10
У меня была такая же проблема. Однако сделать вид 1px, похоже, не работал на моем оригинальном Nexus 7.
Я заметил, что плотность экрана составляет 213, что меньше, чем 240, используемое в xhdpi. Поэтому он думал, что устройство представляет собой плотность mdpi.
Моим решением было сделать так, чтобы в папке dimens
был параметр dividerHeight
. Я установил его в 2dp
в папке values-mdpi
, но 1dp
в папках values-hdpi
etc.
Ответ 11
вы забыли "r" в конце разделителя в макете xml divider
вы вызываете layout @drawable/list_divider, но ваш разделитель xml называется "list_divide"
Ответ 12
set android: dividerHeight = "1dp"
<ListView
android:id="@+id/myphnview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@drawable/dividerheight"
android:background="#E9EAEC"
android:clickable="true"
android:divider="@color/white"
android:dividerHeight="1dp"
android:headerDividersEnabled="true" >
</ListView>