我正在尝试用ContextCompat.GetColor替换Resources.GetColor,但是最后一个没有返回颜色,我不知道应该使用什么而不是Resources.GetColor(从API 23中弃用)。任何人都可以帮助我(见下面我想要实现的目标)?
Button.SetBackgroundColor(ContextCompat.GetColor(this, Resource.Color.LightRed));
请注意,我使用的是Xamarin,但如果您在java中有答案,我可以轻松地进行调整。 谢谢!
答案 0 :(得分:1)
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);
答案 1 :(得分:0)
我认为我遇到了同样的问题 - 并通过在方法上添加注释@SuppressWarnings("ResourceAsColor")
来解决它。
原因是,在我看来,Lint目前还不承认新的API,即使它有效。两种方法都返回一个表示已解析颜色的整数。在我的测试中,Resources.GetColor()和ContextCompat.GetColor()返回相同的值。但是,在使用后者时,我在Android Studio中收到错误消息:
Should pass resolved color instead of resource id here: `getResources().getColor(titleColor)`
...这没有意义,因为我传递了一个已解析的颜色。它只是一个 int ,所以我怎么能错呢......总之,我认为抑制Lint Error是目前处理这种情况的有效方法。
如果你不同意,请提高你的声音,我感兴趣。