2013-06-10 4 views
5

Я хочу отключить выделение, которое появляется, когда пользователь выбирает строку (listSelector) из кода. Я не хочу отключать параметры onClick и enabled (я все еще хочу слушать клики, просто хочу удалить выделение).Android - отключить выбор списка ListView, но включить OnClick

+0

Какой адаптер вы используете? –

+0

Простой ArrayAdapter . Это будет иметь значение? –

+1

«Я хочу отключить подсветку, которая появляется, когда пользователь выбирает строку» - почему? Что относительно пользователей, которые используют клавиши со стрелками, D-pad и т. П. Для навигации по вашему приложению? Пожалуйста, позвольте вашему приложению использовать все * пользователи *, а не только те, кто использует сенсорный экран. – CommonsWare

ответ

5

Просто создайте вытяжку, который имеет прозрачный цвет в нем, что-то вроде этого:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:state_window_focused="false" android:drawable="@android:color/transparent"/> 

<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. --> 
<item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_light" /> 
<item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/list_selector_disabled_holo_light" /> 
<item android:state_focused="true" android:state_pressed="true" android:drawable="@color/transparent" /> 
<item android:state_focused="false" android:state_pressed="true" android:drawable="@color/transparent" /> 
<item android:state_focused="true" android:drawable="@drawable/list_focused_holo" /> 

</selector> 

, а затем установить с помощью кода или XML:

listView.setSelector(R.drawable.my_transparent_selector); 

документация Javadoc для этого метода говорит:

Установите Drawable, который должен использоваться для выделения выбранного элемента.

и атрибут XML является:

андроида: listSelector

Вы можете играть со всеми государствами, помните, что у вас также есть состояние фокусировки.

+0

Из кода Nicolas, а не XML. Я могу обработать его уже из XML, используя атрибут listSelector. –

+0

Я не знаю, зачем вам это нужно, поэтому держите два файла и играйте с ними. –

+0

Нет, после редактирования, он работает нормально. Я использую какой-то флажок вместо выделения строки. Ваш ответ работает как шарм. Благодарю. –

17

Укажите android:listSelector="@android:color/transparent" в вашем ListView XML.

+0

Очень легко и трюк! –

1

попробовать listview.setSelector(new ColorDrawable(Color.TRANSPARENT));

+0

Это было для меня самым легким, и спасибо за программный подход. – Zhang

4

Я сделал это так:

Добавляя два свойства ListView.

android:cacheColorHint="@android:color/transparent" 
android:listSelector="@android:color/transparent" 

Ваш ListView должно выглядеть следующим образом:

<ListView 
    android:id="@+id/listView" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:cacheColorHint="@android:color/transparent" 
    android:listSelector="@android:color/transparent"> 

</ListView> 

Совершено

Смежные вопросы