Переключатель ListView не отображается в Android 5

У меня есть простой список, для которого я определил пользовательский вариант для разделителя. Я определил высоту разделителя как 1dp. Список находится внутри фрагмента.

<shape android:shape="line" > <stroke android:color="@color/custom_color" /> <gradient android:height="1dp" /> </shape> 

Он отлично работает для всех версий Android, кроме L.

Что-нибудь мне не хватает?

Вы должны использовать android:shape="rectangle" вместо android:shape="line" чтобы он работал на каждой версии Android … (также изменил stroke на solid )

 <shape android:shape="rectangle" > <solid android:color="@color/custom_color" /> <gradient android:height="1dp" /> </shape> 

Повеселись!

Как бы то ни было, ваш элемент списка отключен с помощью переопределения isEnabled () для возврата false? В Android L есть изменение (ошибка?), Которое заставляет разделители элементов списка скрываться, если элемент отключен. Я столкнулся с этой же проблемой, мои разделители списков работают во всем, кроме L, и это оказалось причиной.

Вот еще несколько сообщений, на которых это обсуждалось, а также проблема, открытая с Google:

Комментарии здесь: Исчезающий разделитель в ListView, когда ArrayAdapter.isEnabled возвращает false

Как добавить разделители между отключенными элементами в ListView? – Леденец

https://code.google.com/p/android/issues/detail?id=83055

Если это так, похоже, вам может понадобиться вручную нарисовать разделитель с пользовательским представлением и установить делитель в нуль в списке. Я буду стараться.

Обновленный ответ

После дальнейшего тестирования кажется, что разделители будут показывать только, если высота разделителя строго меньше, чем параметр dividerHeight установленный для ListView. Например:

Custom_divider.xml (обратите внимание, что высота разделителя указана по android:width )

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke android:width="1dp" android:color="$ffff0000" /> </shape> 1 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke android:width="1dp" android:color="$ffff0000" /> </shape> 

Макет xml

 <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView" android:divider="@drawable/custom_divider" android:dividerHeight="2dp"/> 

…Будет работать. Но это не будет:

Custom_divider.xml (обратите внимание, что высота разделителя указана по android:width )

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke android:width="1dp" android:color="$ffff0000" /> </shape> 1 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke android:width="1dp" android:color="$ffff0000" /> </shape> 

Макет xml

 <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView" android:divider="@drawable/custom_divider" android:dividerHeight="1dp"/> 

Я предполагаю, что Google испортил оптимизацию для рисования разделителей Listview и просто не будет рисовать их, если не хватает места.

Оригинальное сообщение

Похоже, вам нужно как установить dividerHeight в ListView, так и width штриха разделителя для этого, чтобы он работал на Android 5.

Пример:

custom_divider.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line" > <stroke android:width="10dp" android:color="$ffff0000" /> <gradient android:height="1dp" /> </shape> 

Макет xml

 <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/listView" android:divider="@drawable/custom_divider" android:dividerHeight="20dp"/> 

Атрибут Height не является атрибутом тега градиента. Используйте размер attr, как показано ниже.

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="@android:color/holo_blue_dark" /> <size android:height="1px" /> </shape>