Отображение текущего выбора в виде списка - PullRequest
28 голосов
/ 16 марта 2012

Как видно на планшетных версиях gmail и google talk, я пытаюсь показать текущий выбор в виде списка.Я знаю, что это не стандартная практика, и ее следует избегать при необходимости. В моей программе список всегда находится на экране, а при щелчке элемента отображается новый фрагмент справа (аналогично gmail и google talk).

Чтобы пользователь не смог угадать, какой элемент был выбран, я хотел бы показать текущее выделение, я попытался создать селектор, но после щелчка он возвращается к обычному фону.

как мне этого добиться?

это мой селектор xml

<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:drawable="@drawable/list_item_bg2" android:state_pressed="false" android:state_selected="false"
    android:state_focused="false"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false"
    android:state_selected="true" android:state_checked="false"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="true"
    android:state_selected="false"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="false" android:state_focused="false"
    android:state_selected="false" android:state_checked="true"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true" android:state_focused="true"
    android:state_selected="true" android:state_checked="true"/>
<item android:drawable="@drawable/list_item_selected_bg2" android:state_pressed="true"/>



</selector> 

Ответы [ 4 ]

73 голосов
/ 16 марта 2012

В Gmail и аналогичных приложениях используется состояние activated с соответствующим расположением строк.См .:

В двух словах:

  • Использовать макет строки с активированным фоном (например, android.R.layout.simple_list_item_activated_1)
  • Используйте setChoiceMode(ListView.CHOICE_MODE_SINGLE) на вашем ListView
  • «Проверьте» строку, которая должна быть активирована, с помощью setItemChecked() на вашем ListView, чтобы активировать «активированное» состояние и получитьпостоянное выделение
9 голосов
/ 09 ноября 2012

Другой вариант - установить фон для элемента пользовательского списка на android: background = "? Android: attr / activBackgroundIndicator"

8 голосов
/ 06 сентября 2012

Если вы используете собственный макет для каждой строки:

  1. создайте селектор с android: state_activation = "true"
  2. примените его в качестве фонапользовательского макета.

пример рисования селектора:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
 android:exitFadeDuration="@android:integer/config_shortAnimTime">
<item android:state_activated="true" android:drawable="@color/android_green" />
<item android:drawable="@android:color/transparent" />
</selector>
0 голосов
/ 07 июня 2016

Что сработало для меня

  1. переопределить глобальный стиль ListView в вашей теме

    <item name="android:listViewStyle">@style/MyListView</item>

  2. определите свой стиль

    <style name="MyListView" parent="@android:style/Widget.ListView"> <item name="android:listSelector">@drawable/listview_background_selector</item> </style>

  3. определить селектор listview_background_selector.xml

    <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" android:enterFadeDuration="@android:integer/config_mediumAnimTime" android:exitFadeDuration="@android:integer/config_mediumAnimTime"> <item android:drawable="@color/ListViewBackGroundColorPressed" android:state_activated="true" /> </selector>

  4. установить фон вашего макета listview-item

    android:background="?android:attr/activatedBackgroundIndicator"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...