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" />