如何引用可绘制的颜色属性?

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

任何线索?

问候

Solutions Collecting From Web of "如何引用可绘制的颜色属性?"

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

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)用内容创build文件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)使用可绘制的颜色:

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

希望这能解决你的问题。

只需在/res/values/color.xml创build一个新的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> 

你不能在xml可绘制资源中使用?attr ,因为在编译时由aapt创build可绘制的资源。 Attr资源用于运行时的dynamic连接

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

你需要在你的xml中引用一个颜色资源。 你可以通过创build你自己的资源来做到这一点:

 <?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>