Вопрос по android-layout, android – Как ссылаться на атрибут цвета в Drawable? [Дубликат]

36

This question already has an answer here:

KitKat specific- android.content.res.Resources$NotFoundException: File res/drawable/list_selector_white.xml from drawable resource ID 3 answers

Я хотел бы сделать простую вещь: Определите объект рисования, который имеет точно такой же цвет фона, что и цвет фона, нажатый системой. Я делаю это так в 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   ответов
7

Просто создайте новый файл 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>
Нет, потому что, если я захочу сменить тему, или кто-то выберет другую тему на телефоне, я все равно останусь с фиксированными значениями. Michal
-1

попробуйте этот способ положить цвет в 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>
Вы это проверяли? У меня есть ошибки при попытке использовать:<item android:state_pressed="true" android:drawable="?android:attr/colorPressedHighlight"/> Michal
Я просто хочу сказать, что используйте ваше состояние, если вы хотите & quot; item android: state_selected & quot; но используйте андроид: drawable как атрибут, чтобы установить цвет ......
2

Вы пытаетесь преобразовать атрибут в цвет. Атрибуты - это свойства, обычно присоединяемые к представлению, которые затем можно стилизовать с помощью темы.

Вам нужно сослаться на цветовой ресурс в вашем 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>
Error: User Rate Limit Exceeded@android:color/.... Michal
Error: User Rate Limit Exceeded Michal
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Michal
Error: User Rate Limit Exceeded
47

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

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"/>

Надеюсь, это решит вашу проблему.

Error: User Rate Limit Exceededcode.google.com/p/android/issues/detail?id=26251.
Error: User Rate Limit Exceededandroid.view.InflateException: Binary XML file line #2: Error inflating class <unknown>
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
6

Вы не можете использовать?attr в xml drawable ресурсах, потому что drawable ресурсы созданы aapt во время компиляции. Ресурсы Attr, используемые для динамического соединения во время выполнения

Похожие вопросы