Android - применить selectableItemBackground в XML с поддержкой v7

Даже с поддержкой Android v7 включен в мое приложение

добавлениеandroid:background="?android:attr/selectableItemBackground"

заставляет мою IDE, Eclipse выдает ошибку (мешает мне компилировать), уведомляя меня, что selectableItemBackground только для минимального Api 11 и выше.

Как добавить этот атрибут в фон в XML?

предположим, что копирование и вставка из вышестоящей библиотеки не является решением

3 ответа

Решение

Поскольку атрибут определен в библиотеке (поддержка v7), вы должны использовать его в качестве пользовательского атрибута: т.е. без android: префикс:

android:background="?attr/selectableItemBackground"

Ошибка, которую вы видите, указывает на то, что ?android:attr/selectableItemBackground доступно для версий API>= 11. Верно, действительно.

Здесь выбран пункт назад. Вы можете найти его в /platforms/android-14/data/res/themes.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"
          android:exitFadeDuration="@android:integer/config_mediumAnimTime">

    <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_focused" />
    <item android:drawable="@color/transparent" />

</selector>

и вы можете найти Drawables в вашем каталоге Android SDK

../platforms/android-14/data

Не эксперт в данной области, но, похоже, вам нужна тематическая версия на основе платформы. Официальное руководство объясняет этот процесс довольно хорошо, я думаю.

Вы должны создать разные XML-файлы для каждой версии и сохранить их в res/values-v7, res/values-v11 и т.д. Затем используйте эти стили для ваших представлений. Что-то вроде этого:

в res/values-v7:

<style name="LightThemeSelector" parent="android:Theme.Light">
    ...
</style>

в res/values-v11:

<style name="LightThemeSelector" parent="android:Theme.Holo.Light">
    <item name="selectableItemBackground">?android:attr/selectableItemBackground</item>
    ...
</style>

Затем используйте стиль для представления:

<TextView
    style="@style/LightThemeSelector"
    android:text="@string/hello" />

Надеюсь это поможет. Приветствия.

Другие вопросы по тегам