Подтвердить что ты не робот

Фокус выбора по умолчанию в Clickable Views

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

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

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

Спасибо

4b9b3361

Ответ 1

It list_selector_holo_dark или эквивалентная голодная версия; и это значения по умолчанию в Honeycomb и выше. list_selector_background - это версия без голода, используемая в Gingerbread и ниже.

EDIT: я верю (но не могу подтвердить), что агностический селектор платформы ?android:attr/listSelector

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Определите атрибут (например, в значениях /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 + (например, в значениях-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

Решение, подобное запросу 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>

Ответ 6

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

android:background="?android:attr/listChoiceBackgroundIndicator

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

Ответ 7

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

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

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

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

    <color name="white">#ffffff</color>
    <color name="blue">#7ecce8</color>
    
  • Создайте файл выбора 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> 
    
  • Перейдите к своему виду или кнопке и установите вновь созданный button_selection.xml в качестве фона.

    android:background="@drawable/button_selection"