ContextCompat.GetColor没有返回颜色

时间:2015-11-19 12:51:04

标签: android xamarin android-6.0-marshmallow

我正在尝试用ContextCompat.GetColor替换Resources.GetColor,但是最后一个没有返回颜色,我不知道应该使用什么而不是Resources.GetColor(从API 23中弃用)。任何人都可以帮助我(见下面我想要实现的目标)?

Button.SetBackgroundColor(ContextCompat.GetColor(this, Resource.Color.LightRed));

请注意,我使用的是Xamarin,但如果您在java中有答案,我可以轻松地进行调整。 谢谢!

2 个答案:

答案 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是目前处理这种情况的有效方法。

如果你不同意,请提高你的声音,我感兴趣。