Android 什么是;返回的颜色将根据指定的上下文设置样式';“s主题”;什么意思?

Android 什么是;返回的颜色将根据指定的上下文设置样式';“s主题”;什么意思?,android,Android,我最近注意到一个方法 Context.getResources.getColor(int) 自API 23以来已弃用。 人们应该使用 ContextCompat.getColor(context, R.color.your_color); 文件上说: int getColor(上下文,int id)返回关联的颜色 对于以M开头的特定资源ID,返回的颜色将 为指定上下文的主题设置样式 但是,为特定主题设计颜色意味着什么呢。这不是一种颜色吗?常数?在主题中使用预定义的颜色。那么如何设置它的样式呢

我最近注意到一个方法

Context.getResources.getColor(int)
自API 23以来已弃用。 人们应该使用

ContextCompat.getColor(context, R.color.your_color);
文件上说:

int getColor(上下文,int id)返回关联的颜色 对于以M开头的特定资源ID,返回的颜色将 为指定上下文的主题设置样式


但是,为特定主题设计颜色意味着什么呢。这不是一种颜色吗?常数?在主题中使用预定义的颜色。那么如何设置它的样式呢?

来自
资源的文档
-
intgetcolor(intid,Resources.Theme)

返回与特定资源ID关联的主题颜色整数。如果资源包含复杂的ColorStateList,则返回集合中的默认颜色

因此,资源id可以不仅仅是一种简单的颜色,它可以指向如下内容:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true"
          android:color="@color/sample_focused" />
    <item android:state_pressed="true"
          android:state_enabled="false"
          android:color="@color/sample_disabled_pressed" />
    <item android:state_enabled="false"
          android:color="@color/sample_disabled_not_pressed" />
    <item android:color="@color/sample_default" />
 </selector>
为了完全解析颜色值,您需要访问主题中的属性值


根据,这些资源实际上并没有附加到主题,如果使用使用属性的颜色状态列表调用旧方法,将引发异常。在使用棉花糖之前,由于此限制,您无法在颜色状态列表中使用属性。

谢谢。但在状态列表选择器中,我们不能使用属性,而只能使用固定的颜色。但是,你可能有道理。如果出现其他问题,我会再等一会儿。您确实可以对颜色值使用属性。根据我的经验,您不能在状态列表选择器中对颜色值使用属性。我试过了。在旧版本和支持库上。所以我想这在新的API中是新的。竖起大拇指,你说得对。我以为您可以在早期版本中使用属性,但事实证明这是棉花糖的新特性。幸运的是,Alex Lockwood几天前发表了一篇关于这一点的文章:
    <item android:color="?attr/sample_default_color" />