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

16

我试图在选择器中使用样式中定义的颜色,但是这导致了 Resources$NotFoundException 异常。

首先我在 attr.xml 中添加了一个新属性:

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

然后我在styles.xml中定义了那个属性的值:

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

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

<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中创建颜色并使用新的属性,但那也失败了。

很明显我漏掉了什么,但不确定如何解决。我的意图是创建多个主题,并且让选择器使用当前选定主题中的颜色。

3个回答

1

然而,根据文档(http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html#attr_android:src),BitmapDrawable中的src属性<bitmap>可以是主题属性。 - Joe Bowbeer
1
即使属性是引用,样式是可绘制的,你仍然会崩溃系统,因为Android只允许在视图中使用自定义属性(至少这是我推断出来的 - 我真的希望我错了!) - HGPB

1

这是我的一个可行的东西。

attrs.xml:

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

styles.xml,作为主题的子元素:

<item name="color_selection">@color/selection_background_inverse</item>

在drawable文件夹中的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"../>

-1

如果我将“?unread_background”替换为硬编码的颜色值,那么它就可以正常工作,因此我认为其他答案不适用于这里。 - toddler
你找到问题的答案了吗?我也有同样的问题。 - Georgy Gobozov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接