Что можно сделать по умолчанию для нажатия элемента списка

Когда пользователь нажимает элемент ListView (android:state_pressed="true"), он мигает желтым цветом (или вы можете нажать и удерживать).

Что это за рисунок? Я создал свой собственный селектор, потому что мне нужен собственный цвет элемента ListView, но я теряю нажатый цвет.

Существует документ Android о скинах кнопок, который ссылается на #ffff0000, но это дает красный цвет.

Кто-нибудь знает, что это такое и как на это ссылаться?


person Andrew    schedule 17.08.2010    source источник


Ответы (4)


Системные ресурсы по умолчанию можно найти в <android-sdk>/platforms/android-<version>/data/res. В частности, селектор списка определен в drawable/list_selector_background.xml:

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

    <item android:state_window_focused="false"
        android:drawable="@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_background_disabled" />
    <item android:state_focused="true" android:state_enabled="false"
        android:drawable="@drawable/list_selector_background_disabled" />

    <item android:state_focused="true" android:state_pressed="true"
        android:drawable="@drawable/list_selector_background_transition" />
    <item android:state_focused="false" android:state_pressed="true"
        android:drawable="@drawable/list_selector_background_transition" />

    <item android:state_focused="true"
        android:drawable="@drawable/list_selector_background_focus" />

</selector>

Рисунок, показанный на прессе, list_selector_background_transition, представляет собой не один цвет, а два изображения из 9 полей, желтое и белое, с анимированным переходом между ними.

<transition xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@android:drawable/list_selector_background_pressed"  />
    <item android:drawable="@android:drawable/list_selector_background_longpress"  />
</transition>
person Jonas    schedule 02.12.2010
comment
Вкратце: вы хотите сослаться на @android:drawable/list_selector_background_transition - person Jonas; 02.12.2010
comment
Когда я создаю свой собственный селектор, почему я не могу ссылаться на @android:drawable/list_selector_background_transition? - person Andrew; 08.12.2010
comment
Я тоже это заметил. Короче не знаю почему. Однако вы можете создать собственную копию list_selector_background_transition в своем проекте. Затем вы можете сослаться на него. - person Jonas; 18.01.2011
comment
@ Джонас, это потому, что они не видны публично. - person dcow; 22.08.2013
comment
Я думаю, что для новых версий Android этот селектор (list_selector_background) не используется, так как они все еще желтые, а новые синие (или серые, начиная с Kitkat). Вопрос в том, как получить новые? - person android developer; 05.05.2014
comment
@androiddeveloper Вы когда-нибудь понимали это? - person you786; 12.08.2014

То, о чем вы говорите, это встроенный селектор ОС Android.

Сделайте свою собственную подсветку с помощью xml-файла в вашей папке с возможностью рисования следующим образом:

<?xml version="1.0" encoding="utf-8"?>
  <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
  <item android:state_pressed="true" android:color="#YOURCOLOR" /> 
  <item android:color="#FE896F" /> 
</selector>

Затем в вашем XML-файле у вас есть свой ListView.

android:textColor="@drawable/highlight" //For text to appear like YOURCOLOR
//or if you wish the background
android:background="@drawable/highlight" //For the background to appear like YOURCOLOR

Я надеюсь, что это все, и скажите мне, сработало это или нет!

person Curtain    schedule 17.08.2010
comment
Спасибо за ваш ответ. Я уже создал такой файл селектора. Я использовал трюк Ромена Гая, чтобы сохранить селектор панели прокрутки для элементов списка, для которых я установил цвет фона. То, что я ищу, - это цвет Android по умолчанию state_pressed. - person Andrew; 18.08.2010
comment
Вы можете сделать уродливый хак, например, распечатать нажатый элемент, а затем посмотреть цвет RGB, но, конечно, цвет по умолчанию где-то объявлен. Проблема в том, как его найти - person Curtain; 18.08.2010
comment
На самом деле это больше похоже на градиент некоторого значения - person Andrew; 18.08.2010
comment
Я считаю, что это list_selector_background_pressed, но я не знаю, как на него ссылаться. Я пробовал @android:drawable/list_selector_background_pressed, но безрезультатно - person Andrew; 18.08.2010
comment
Это как тайна; Я был бы очень признателен за то, что я знаю решение для этого. В противном случае; не может быть, чтобы программисты не могли изменить эту конкретную вещь? - person Curtain; 18.08.2010

Цвет определяется как #AARRGGBB, где AA представляет значение альфа-канала (прозрачности), RR — количество красного, GG — количество зеленого, а BB — количество синего. Таким образом, #ffff0000 сплошной и красный. Если вы хотите оранжевый, добавьте немного зеленого, например: #ffffA500. Google для значений цвета RGB, чтобы увидеть страницы цветов с их значениями rgb.

person Cheryl Simon    schedule 17.08.2010
comment
Да, у меня есть это. Мне просто интересно, что такое Android по умолчанию. Но спасибо за ваш ответ - person Andrew; 18.08.2010

Я использовал инструмент выбора цвета в приложении для редактирования фотографий, чтобы найти внешний и внутренний цвета градиента и сделал свой собственный.

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#ffb300"
        android:centerColor="#ffc800"
        android:endColor="#ffb300"
        android:angle="270"/>
</shape>
person Andrew    schedule 17.08.2010