Фокус выбора по умолчанию в Clickable Views
У меня есть несколько интерактивных просмотров, и я хочу установить доступный по умолчанию фон, который присутствует в списке (в ICS есть синий цвет). Я попытался поставить в качестве фона следующее:
android:background="@android:drawable/list_selector_background"
но по умолчанию это не синий по умолчанию (тот, который я использовал, оранжевый). Каков используемый метод по умолчанию для android в качестве переключателя кликов?
Спасибо
Ответы
Ответ 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"