选择器资源可以使用样式中定义的颜色吗?

时间:2010-09-21 06:03:35

标签: android

我正在尝试使用在选择器中的stlyle中定义的颜色,但它导致了一个Resources $ NotFoundException。

首先,我向attr.xml添加了一个新属性:

<resources>
    <attr name="unread_background" format="color" />
</resources>

然后我在styles.xml中定义了attr值:

<style name="ThemeNoTitleBar" parent="android:Theme.NoTitleBar">
    <item name="unread_background">#000000</item>
</style>

然后我尝试在我的选择器定义中使用该attr:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- other states snipped -->
    <item android:state_selected="false"
        android:drawable="?unread_background" />
</selector>

最后,活动使用清单中的ThemeNoTitleBar样式主题。

我也尝试在colors.xml中创建一个颜色并让它使用新的attr,但也失败了。

我显然错过了一些东西,但我不知道该怎么做才能修复它。我的目的是创建多个主题,并让选择器使用当前所选主题中的颜色。

3 个答案:

答案 0 :(得分:1)

<item android:state_selected="false"
    android:drawable="?unread_background" />

以上部分是错误的。

drawable仅引用可绘制资源。 请看这个链接。 http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

答案 1 :(得分:1)

这是我的作品。

attrs.xml:

<attr name="color_selection" format="reference"/>

styles.xml,作为主题的子项:

<item name="color_selection">@color/selection_background_inverse</item>
可绘制文件夹中的

shape_background_selected.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="?attr/color_selection"/>
</shape>

你的选择器文件,在我的例子中:selector_background_recyclerview:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shape_background_selected" android:state_activated="true" />
    <item android:drawable="@drawable/shape_background_selected" android:state_pressed="true" /> <!-- pressed -->
    <item android:drawable="@color/transparent" /> <!-- default -->
</selector>

最后,在你的视图中使用xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:background="@drawable/selector_recyclerview_item_background"../>

答案 2 :(得分:0)

Android button with different background colors看看这个例子。看起来你需要它。