如何从颜色资源中获取color-int?
如何从颜色资源中获取color-int?
问题的出现原因:在Android开发中,我们经常需要使用颜色资源来设置视图的背景颜色。但是,有时我们需要将颜色资源转换为color-int类型,以便进行一些其他操作。因此,问题是如何从颜色资源中获取color-int。
解决方法:可以使用ContextCompat类中的getColor()方法来获取color-int。具体步骤如下:
1. 首先,在values文件夹下的color.xml文件中定义颜色资源。例如,我们定义了一个名为"my_view_color"的颜色资源,其值为"#fff3632b"。
2. 然后,在代码中使用ContextCompat.getColor()方法来获取color-int。将上述定义的颜色资源作为参数传递给该方法,并将返回的color-int赋值给一个整型变量backgroundColor。
3. 最后,使用myView.setBackgroundColor()方法将获取到的color-int设置为视图的背景颜色。
以下是具体的代码示例:
int backgroundColor = ContextCompat.getColor(context, R.color.my_view_color); myView.setBackgroundColor(backgroundColor);
通过上述步骤,我们可以从颜色资源中获取color-int,并将其应用于视图的背景颜色。
另外,如果需要在非Activity或Fragment类中使用getResources()方法,可以参考上述内容中提到的相关问题链接,了解如何在其他类中使用该方法。此外,getResources()方法也可以在实现了Context接口的任何类和View上使用。
相关链接:
- [How to set background color of a View](https://stackoverflow.com/questions/2173936)
- [Color docs](http://developer.android.com/reference/android/graphics/Color.html)
- [Color Style Design docs](http://developer.android.com/design/style/color.html)
- [Using getResources() in non-Activity class](http://stackoverflow.com/questions/7666589)
根据新的Android Support Library(以及此更新), 现在你应该调用:ContextCompat.getColor(context, R.color.name.color);。
根据文档:
public int getColor (int id)
该方法在API level 23中已弃用。
使用getColor(int, Theme)代替。
对于getResources().getColorStateList(id)也是同样的解决方法:
你需要像这样更改它:ContextCompat.getColorStateList(getContext(),id);
关于ThemeOverlay,使用最接近视图的上下文:
val color = ContextCompat.getColor(
closestView.context,
R.color.name.color
)
这样你可以根据ThemeOverlay获取正确的颜色。
特别是在同一个activity中使用不同的主题时,这是非常需要的。如果你想更多了解关于主题和样式的内容,可以参考这个演讲:Developing Themes with Style
对于那些不确定要填写什么主题的人,在新的方法中,Theme可以传入null,所以如果你不确定要传入什么主题,只需调用getColor(R.color.my_color, null)。
要确保你做得正确,尝试在activity的onCreate方法中调用它,然后要获取上下文,你需要调用getContext()或者只是"this"。
如何从颜色资源中获取color-int?
问题出现的原因是因为getColor(int id)方法在API23中被弃用了,需要使用其他方法来获取color-int。
解决方法是使用以下方法:
1. 使用getResources().getColor(R.color.idname)来获取color-int。这是一种常用的方法。
2. 使用ContextCompat.getColor(context, R.color.your_color)来获取color-int。这是在支持库23中添加的方法,适用于API23以上的版本。
3. 使用ResourcesCompat.getColor(getResources(), R.color.your_color, null)来获取color-int。这是一种适用于API23之前和之后的通用方法。你可以选择是否使用主题来获取color-int。
此外,还有一些其他的讨论和建议:
- 使用android.R.color.some_color来获取color-int的方法也是可以的。
- 不需要缓存结果,因为获取color-int的过程不会消耗太多的时间和资源。
- 可以将获取color-int的代码封装成一个方法,以提高代码的可读性。
- getColor()方法现在已经被弃用,可以使用ContextCompat.getColor(context, R.color.your_color)来代替。
- ContextCompat和ResourcesCompat之间没有实际的区别,如果没有实际区别,建议从答案中删除其中一个。
总之,获取color-int的方法有很多种,具体选择哪种方法取决于你的项目需求和API版本。