43

我想做一件简单的事情:定义一个与系统状态按下的背景颜色具有完全相同背景颜色的可绘制对象。我在 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

有什么线索吗?

问候

4

5 回答 5

63

您可能需要执行以下操作来解决您的问题:

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) 假设您的 styles.xml (Theme.darkTheme.light) 中有 2 个主题定义:

<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)在drawable中使用颜色:

<color android:color="?attr/my_color"/>

希望这可以解决您的问题。

于 2013-04-13T22:19:05.300 回答
10

只需在其中创建一个新的 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>
于 2012-06-12T09:51:05.143 回答
8

您不能?attr在 xml 可绘制资源中使用,因为可绘制资源由 aapt 在编译时创建。运行时用于动态连接的 attr 资源

于 2015-11-27T17:00:16.537 回答
6

您正在尝试将属性转换为颜色。属性是通常附加到视图的属性,然后可以使用主题对其进行样式设置。

您需要在 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>
于 2012-06-12T10:02:38.613 回答
0

尝试这种方式将颜色放入 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>
于 2012-06-12T10:11:07.720 回答