7

是否确认我不能在颜色状态列表资源中使用主题颜色属性?

我有以下代码,它非常完美。

颜色/home_menu_text_view_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#ffffffff" />    <!-- pressed -->
    <item android:state_focused="true" android:color="#ffffffff" />    <!-- focused -->
    <item android:state_selected="true" android:color="#ffffffff" />   <!-- selected -->
    <item android:color="#ff000000" />                                 <!-- default -->
</selector>

布局/home_menu_row.xml

<!-- Use duplicateParentState, so that we can receive click event from parent linear layout -->
<TextView
    android:id="@+id/name"
    android:gravity="center_vertical"
    android:padding="5dp"
    android:layout_width="0dp"
    android:layout_weight="1"
    android:layout_height="48dp"
    android:duplicateParentState="true"        
    android:textColor="@color/home_menu_text_view_selector"
    android:drawablePadding="10dp" />

但是,如果我将代码调整为以下内容,它将不再起作用。在默认模式下,它不再变为我想要的颜色。?android:attr/textColorPrimary假设在我的情况下是黑色(#ff000000)。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="#ffffffff" />    <!-- pressed -->
    <item android:state_focused="true" android:color="#ffffffff" />    <!-- focused -->
    <item android:state_selected="true" android:color="#ffffffff" />   <!-- selected -->
    <item android:color="?android:attr/textColorPrimary" />            <!-- default -->
</selector>

有人问过类似的问题,选择器资源可以使用样式中定义的颜色吗?和我一样,但还没有具体的答案。于是,我又把这个球扔了出去。:)

4

1 回答 1

3

根据收到的评论编辑

仅供参考,我相信这已在 API 23 中修复。您现在应该能够在颜色状态列表中声明属性。——亚历克斯·洛克伍德

旧答案

不是因为英语专业知识较少,而是因为核心 Android 专业知识较少,我缺乏文字来解释这一点,仍在写答案以说明我对这个主题的看法。

Android Attribute (attr)两者Android Color都是完全不同的东西。仅仅因为attr 还定义了颜色值,您无法将其与单一格式颜色相关联

attr用于定义有关视图、其引用、颜色、尺寸、类型等的许多其他内容。即使您不传递任何格式,它也需要使用某些格式的默认值来应用样式属性。

例如:您可以使用 ImageView 通过设置为 src 来显示图像,也可以使用一个 LinearLayout 并通过将其设置为背景来显示图像。如果您使用 Layout 而不是 ImageView 来显示图像,那么您不能接受它来进行自动缩放,例如中心裁剪,fitXY,这只有 ImageView 才有可能。

同样的方式,在编写时selector您可以传递颜色,它可以是六色代码或定义的颜色,但您不能设置attr为,color因为选择器项的android:color 仅接受颜色值,而 attr 默认情况下还有一些其他格式,例如类型。

单行答案: attr 不是颜色,是的,它有一种格式说颜色,但颜色不是 attr 包含的唯一格式,因此您不能使用 attr 代替颜色。

于 2013-03-28T06:06:01.903 回答