Как ссылаться на атрибут цвета в 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
Есть какие-нибудь подсказки?
С уважением
5 ответов
Возможно, вам придется сделать следующее, чтобы решить вашу проблему:
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 темы в вашем styles.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"/>
Надеюсь, это решит вашу проблему.
Просто создайте новый файл 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>
Ты не можешь использовать ?attr
в xml drawable ресурсов, потому что drawable ресурсов, созданных aapt во время компиляции. Ресурсы Attr, используемые для динамического соединения во время выполнения
Вы пытаетесь преобразовать атрибут в цвет. Атрибуты - это свойства, обычно присоединяемые к представлению, которые затем можно стилизовать с помощью темы.
Вам нужно сослаться на цветовой ресурс в вашем 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>
Попробуйте этот способ поставить цвет в Android: Drawable, как показано ниже
<?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>