Фон селектора по умолчанию в интерактивных представлениях - PullRequest
48 голосов
/ 12 февраля 2012

У меня есть несколько интерактивных представлений, и я хочу установить доступный по умолчанию фон, который присутствует при щелчке в списке (в ICS - синий цвет) Я попытался поставить в качестве фона это:

android:background="@android:drawable/list_selector_background"

но это не синий по умолчанию, который у меня есть по умолчанию (я использовал оранжевый). Какое рисование используется по умолчанию на Android в качестве селектора кликов?

Спасибо

Ответы [ 8 ]

157 голосов
/ 29 февраля 2012

Это работает для меня:

android:background="?android:attr/selectableItemBackground"
20 голосов
/ 12 февраля 2012

Это list_selector_holo_dark или эквивалентная голографическая версия; и это значения по умолчанию в сотах и ​​выше. list_selector_background - это не голографическая версия, используемая в Gingerbread и ниже.

РЕДАКТИРОВАТЬ : Я считаю (но не могу подтвердить), что селектор, независимый от платформы, имеет значение ?android:attr/listSelector

11 голосов
/ 03 января 2015

Если вы используете appcompat-v7, вы можете просто использовать ?attr/selectableItemBackground.

8 голосов
/ 16 августа 2013

Существует способ объединить все действительные ответы:

Определить атрибут (например, в values ​​/ attrs.xml):

<attr name="clickableItemBackground" format="reference"/>

В разделе вашей темы, зависящей от платформы (например, в values ​​/ styles.xml или values ​​/ themes.xml) объявите это:

<style name="Theme.Platform" parent="@android:style/Theme.Whatever">
        <item name="clickableItemBackground">@android:drawable/list_selector_background</item>
</style>

В разделе зависимой от платформы темы для api-11 + (например, в values-v11 / styles.xml илиvalues-v11 / themes.xml) объявите это:

<style name="Theme.Platform" parent="@android:style/Theme.Holo.Whatever">
        <item name="clickableItemBackground">?android:attr/selectableItemBackground</item>
</style>

Затем используйте ?attr/clickableItemBackground везде, где это необходимо.

5 голосов
/ 23 октября 2013

Решение, похожее на ответ flx, но без определения дополнительного атрибута.

Независимый от платформы стиль, используемый для устройств pre-Holo (в res\values\styles.xml):

<style name="SelectableItem">
    <item name="android:background">@android:drawable/list_selector_background</item>
</style>

Стиль для Holoустройства (уровень API 14+) (в res\values-v14\styles.xml):

<style name="SelectableItem">
    <item name="android:background">?android:attr/selectableItemBackground</item>
</style>

Применить стиль к необходимому виду, например, LinearLayout:

<LinearLayout
    style="@style/SelectableItem"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
...
</LinearLayout>
4 голосов
/ 09 мая 2014

Это прекрасно работает на API 11 и выше. Но, как уже отмечалось, он не будет работать на предыдущих версиях.

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

Вот решение, позволяющее запустить его на всех версиях под управлением Android.

  1. Добавьте соответствующие цвета в colors.xml, который находится в вашей папке значений. Это должно выглядеть так:

    <color name="white">#ffffff</color>
    <color name="blue">#7ecce8</color>
    
  2. Создать файл селектора xml. Здесь я назвал это button_selection.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/blue"/>         <!--pressed -->
    <item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused -->
    <item android:drawable="@color/white"/> <!-- default -->
    </selector> 
    
  3. Перейдите к своему виду или кнопке и установите вновь созданный button_selection.xml в качестве фона.

    android:background="@drawable/button_selection"
    
4 голосов
/ 23 июля 2013

В качестве альтернативы,

android:background="?android:attr/listChoiceBackgroundIndicator

, если вы просто хотите, чтобы элементы выделялись синим цветом (или каким-либо другим текущим значением по умолчанию), когда они нажимаются.

1 голос
/ 20 ноября 2018

Настройка Background ограничивает вас от выбора цвета фона или рисования позже!Поэтому я советую добавить этот стиль к вашему styles.xml:

<style name="TouchableView">
    <item name="android:foreground">?android:attr/selectableItemBackground</item>
</style>

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

            android:theme="@style/TouchableView"

Нравится ANY ПРОСМОТР!

    <TextView
        android:id="@+id/my_orders"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="0dp"
        android:theme="@style/TouchableView"
        android:background="@color/white"
        android:gravity="left"
        android:padding="10dp"
        android:text="@string/my_orders"
        android:textColor="@color/gray"
        android:textSize="14sp" />

Не забудьте добавить onClickListener, чтобы увидеть результаты.

...