You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

getColor(int id)已废弃,使用带Theme参数的重载实现是否正确?

结论

你当前的适配方案存在两个问题,不能直接作为通用适配方案使用:

  1. 方法调用方式错误:Android系统的Activity、Fragment、Context类均未提供双参数的getColor(int id, Theme theme)方法,该方法属于Resources类,你如果直接按示例代码写会编译不通过,正确的原生调用写法应该是getResources().getColor(R.color.green, getContext().getTheme())。
  2. 没有兼容低版本系统:这个双参数的getColor方法是API 23(Android 6.0)才新增的,如果你应用的最小兼容版本低于23,在API 22及更低版本的设备上运行会触发方法找不到的崩溃。

正确适配方案

通用适配推荐直接使用AndroidX兼容库提供的ContextCompat.getColor()工具方法,它内部已经做好了版本判断和主题适配,你不需要额外处理兼容逻辑,写法如下:

int greenColor = ContextCompat.getColor(getContext(), R.color.green);

如果你没有引入AndroidX兼容库,可以手动写版本判断逻辑实现适配:

int greenColor;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    // API 23及以上使用带主题参数的方法
    greenColor = getResources().getColor(R.color.green, getContext().getTheme());
} else {
    // API 22及以下使用旧版方法
    greenColor = getResources().getColor(R.color.green);
}

补充说明

你在res/colors.xml中定义的green颜色格式是正确的,#FF00FF00为标准的ARGB八进制写法,适配过程中不需要修改该定义。

内容的提问来源于stack exchange,提问作者marioc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:24:03