Как ссылаться на атрибут цвета в drawable?
Я хотел бы сделать простую вещь:
Определите выталкиваемый, который имеет тот же цвет фона, что и цвет фона с системой.
Я делаю это так: res/drawables/my_drawable.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_selected="true">
<color android:color="?android:attr/colorPressedHighlight"/>
</item>
<item android:state_selected="false">
<color android:color="@color/section_list_background"/>
</item>
</selector>
Я всегда получаю:
java.lang.UnsupportedOperationException: Cant convert to color: type=0x2
Любые подсказки?
Привет
Ответы
Ответ 1
Вам может потребоваться выполнить следующие действия:
1) Определите 2 цвета для каждой темы в вашем файле цветов:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="my_color_dark">#ff33B5E5</color>
<color name="my_color_light">#ff355689</color>
</resources>
2) Создать файл res/values /attrs.xml с содержимым:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<attr name="my_color" format="reference" />
</resources>
3) Предполагая, что у вас есть 2 темы в ваших стилях. xml (Theme.dark
и Theme.light
) определяют:
<style name="Theme.dark" parent="@style/Theme.Sherlock">
<item name="my_color">@color/my_color_dark</item>
</style>
<style name="Theme.light" parent="@style/Theme.Sherlock.Light">
<item name="my_color">@color/my_color_light</item>
</style>
4) Используйте цвет в растягиваемом виде:
<color android:color="?attr/my_color"/>
Надеюсь, это исправит вашу проблему.
Ответ 2
Просто создайте новый файл color.xml в /res/values/color.xml
и поместите в него следующий код:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="editcolor">#ff99ffff</color>
<color name="transparent">#00000000 </color>
</resources>
Ответ 3
вы не можете использовать ?attr
в ресурсах, извлекаемых из xml, потому что ресурс, созданный aapt во время компиляции, можно использовать. Ресурсы Attr, используемые для динамического подключения во время выполнения
Ответ 4
Вы пытаетесь преобразовать атрибут в цвет. Атрибуты - это свойства, обычно прикрепленные к представлению, которые затем могут быть написаны с использованием темы.
Вам нужно указать ресурс цвета в вашем xml. Вы можете сделать это, создав свой собственный ресурс:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPressedHighlight">#FF8800</color>
</resources>
Затем сделайте следующее:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_selected="true">
<color android:color="@color/colorPressedHighlight"/>
</item>
<item android:state_selected="false">
<color android:color="@color/section_list_background"/>
</item>
</selector>
Или вы можете ссылаться на цвет, доступный в ресурсах Android:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_selected="true">
<color android:color="@android:color/holo_orange_light"/>
</item>
<item android:state_selected="false">
<color android:color="@android:color/holo_blue_dark"/>
</item>
</selector>
Ответ 5
попробуйте этот способ поместить цвет в android: можно сделать как ниже
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="?android:attr/colorPressedHighlight"/> <!-- pressed -->
<item android:state_focused="true" android:drawable="@color/blue"/> <!-- focused -->
<item android:drawable="@color/section_list_background"/> <!-- default -->
</selector>
или
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true" android:color="?android:attr/colorPressedHighlight"/>
<item android:state_enabled="false" android:color="@color/section_list_background" />
<item android:color="@color/testcolor5"/>
</selector>