Прочитал ряд связанных вопросов здесь, в SO, а также просмотрел документы и источник Android, чтобы попытаться понять это, но я в тупике, хотя, учитывая, что listSelector, кажется, применяются только стили выбранных элементов, я не в шоке ...Список ListView List List, не отображающий фон элемента по умолчанию
у меня есть ListView определено в main.xml здесь:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fadingEdgeLength="5dp"
android:divider="#000000"
android:dividerHeight="1dp"
android:listSelector="@drawable/list_selector" />
<TextView
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center"
android:singleLine="false"
android:text="@string/message_list_empty" />
</FrameLayout>
listSelector ссылка здесь (заимствованы в основном из default State State List, найденный в SDK: /android/platforms/android-8/data/res/drawable/list_selector_background.xml):
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- the window has lost focus, disable the items -->
<item
android:state_window_focused="false"
android:drawable="@drawable/shape_row_disabled" />
<!-- the list items are disabled -->
<item
android:state_enabled="false"
android:state_focused="true"
android:state_pressed="true"
android:drawable="@drawable/shape_row_disabled" />
<item
android:state_enabled="false"
android:state_focused="true"
android:drawable="@drawable/shape_row_disabled" />
<item
android:state_enabled="false"
android:drawable="@drawable/shape_row_disabled" />
<!-- the list items are enabled and being pressed -->
<item
android:state_focused="true"
android:state_pressed="true"
android:drawable="@drawable/shape_row_transition" />
<item
android:state_focused="false"
android:state_pressed="true"
android:drawable="@drawable/shape_row_transition" />
<!-- the list items are enabled and being used -->
<item
android:state_focused="true"
android:drawable="@drawable/shape_row_selected" />
<!-- the default item -->
<item
android:drawable="@drawable/shape_row" />
</selector>
В вводимого коэффициента ссылочные являются формы, закругленные прямоугольники, например, так:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
android:startColor="#EF6100"
android:centerColor="#FF8E00"
android:endColor="#EF6100"
android:angle="270" />
<corners
android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp"
android:topLeftRadius="7dp"
android:topRightRadius="7dp" />
</shape>
Таким образом, конечный результат должен быть ListView с элементами с @ вытяжке/shape_row фона по умолчанию, а затем разные цветные фоны в зависимости от состояния. Когда я запускаю свой список, все работает отлично, когда состояния активны, например, элемент получает фокус, нажат и т. Д., Но сами элементы имеют прозрачный фон, когда ни один не выбран (т. Е. Состояние представления по умолчанию). Я надеялся, что последнее правило Государственного списка,
<item android:drawable="@drawable/shape_row" />
бы захватить это состояние, но по какой-то причине он не работает. Я переместил вещи и попробовал разные настройки, и ничего. Если я отредактирую файл row.xml, который я использую для определения элементов списка в ListView и попытаюсь добавить конкретный андроид: фон, который указывает на @ drawable/shape_row, каждая строка получает правильный фон, НО при нажатии, в фокусе, и т. д. не могут обрабатываться (или, по крайней мере, не могут быть замечены, поскольку фон никогда не изменяется).
Может ли кто-нибудь указать мне правильное направление здесь? Я очень близок к тому, чтобы положить это на кровать, но, попробовав почти все, просто не могу заставить элементы ListView взять фон по умолчанию и ответить на реализованный список состояний через android: listSelector.
Спасибо,
Пол
EDIT:
Также просто попытался добавить Android: itemBackground = "@ вытяжке/shape_row" в ListView в main.xml, и неудивительно, что не повезло (документацию укажите, что он должен использоваться для указания фоновых элементов пунктов меню, но считал, что это стоит того, чтобы делать с элементами списка).
Другое дело, добавив android: visible = "true" к каждому из селекторов и определений элементов. Документы StateListDrawable, похоже, указывают, что "Provides initial visibility state of the drawable; the default value is false", но добавление этого ничего не изменило.
EDIT2: Итак, на основании исследований, проведенных ниже Qberticus, кажется, что может быть только один набор селекторов списков для каждого представления, что подтверждает поведение селектора списка. Я также могу подтвердить, что установка андроида: drawSelectorOnTop перемещает селектор IN FRONT выбранного элемента, но это, конечно, скрывает сам элемент, так что я вижу только селектор (который в моем случае является цветной фигурой).
Вот что список выглядит с фон набор:
Благодаря множеству фона, нет никаких изменений по внешнему виду при выборе элементов. Если изменить андроид: drawSelectorOnTop директиву истинны и выбрать пункт, я получаю:
И, наконец, если я не устанавливал фоновое изображения для элементов списка, селектор работает, как ожидалось, но, конечно, , нет никаких фоновых изображений, как последнего правления StateSelector не появляется, чтобы следовать (она не должна выступать в качестве Catchall?) для невыбранных элементов, означающих не хороший обычай округлые формы:
Итак, моя проблема остается; если я не устанавливаю фон для каждого элемента списка, я вижу, как работает селектор, но элементы не имеют фона, если они не выбраны. Если я устанавливаю фон для элемента, они отлично смотрятся, когда они не выбраны, но фон скрывает селектор. Невозможно ли иметь элемент с уникальной формой с рабочими селекторами?
Спасибо за кого-то, кто может вес в.
К сожалению, у меня все еще возникают проблемы с настройкой моего списка. Я разместил здесь свои конкретные проблемы: http://stackoverflow.com/questions/5426385/listview-with-nine-patch-item-background-issues; Я был бы признателен за любые материалы, которые у вас есть. – LostNomad311
Также установите атрибут списка "cacheColorHint" в свой цвет bg. В противном случае быстрый прокрутка по списку может привести к появлению списка черных элементов. – larham1