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

时间:2013-03-28 02:54:26

标签: android

是否确认我无法在color state list resource中使用主题颜色属性?

我有以下代码非常完美。

颜色/ 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>

有人问我一个类似的问题Can a selector resource use a color defined in a style?,但还没有具体的答案。因此,我再次抛出这个球。 :)

1 个答案:

答案 0 :(得分:1)

根据收到的评论编辑

  

仅供参考,我相信这已在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而不是颜色。