我正在尝试用ContextCompat.GetColor替换Resources.GetColor,但最后一个没有返回颜色,我不知道应该使用什么来代替Resources.GetColor(从API23开始不推荐使用它)。有没有人可以帮助我(见下文我想要实现的目标)?
Button.SetBackgroundColor(ContextCompat.GetColor(this, Resource.Color.LightRed));
请注意,我使用的是Xamarin,但如果你有java的答案,我可以很容易地改编它。谢谢!
发布于 2015-11-20 11:17:58
ContextCompat只返回颜色的整数表示形式。您需要通过拆分RGB部分将其转换为Android颜色。使用像这样的东西
using Android.Graphics;
public static Color GetColorFromInteger(int color)
{
return Color.Rgb(Color.GetRedComponent(color), Color.GetGreenComponent(color), Color.GetBlueComponent(color));
}
在你的方法中
btn.SetBackgroundColor(GetColorFromInteger(ContextCompat.GetColor(this, Resource.Color.LightRed);
发布于 2016-03-15 16:37:46
我想我也遇到了同样的问题--通过在方法上添加注释@SuppressWarnings("ResourceAsColor")
解决了这个问题。
原因是,在我看来,Lint目前不能识别新的API,即使它是有效的。这两种方法都返回表示已解析颜色的整数。在我的测试中,Resources.GetColor()和ContextCompat.GetColor()返回相同的值。然而,当使用后者时,我在Android Studio中得到一个错误,说:
Should pass resolved color instead of resource id here: `getResources().getColor(titleColor)`
...which没有意义,因为我传递的是一个已解析的颜色。这只是一个int,所以我怎么会错呢...所以总而言之,我认为抑制Lint错误是目前处理这种情况的有效方法。
如果你不同意,请提高你的声音,我会感兴趣的。
https://stackoverflow.com/questions/33804504
复制相似问题