获取Android Res文件下的Drawable,Color等文件出现的异常总结

本文探讨了在不同Android系统版本中加载资源时遇到的问题,包括使用已废弃的方法及导致程序崩溃的情况。针对这些问题,文章介绍了如何利用ContextCompat类来确保代码在各版本Android系统上都能稳定运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、使用以下方法过时,只是过时了,并不影响使用,只是在特殊情况下,在Android4.1系统之前加载缩略图可能会出现异常,所以被谷歌废弃了。

context.getResources().getColor(R.color.txt_color_orange)

2、使用以下方法在Api19的程序会crash:NoSuchMethodError

context.getColor(R.color.txt_color_orange)

3、查看系统源码

  public static final Drawable getDrawable(Context context, @DrawableRes int id) {
        final int version = Build.VERSION.SDK_INT;
        if (version >= 21) {
            return ContextCompatApi21.getDrawable(context, id);
        } else if (version >= 16) {
            return context.getResources().getDrawable(id);
        } else {
            // Prior to JELLY_BEAN, Resources.getDrawable() would not correctly
            // retrieve the final configuration density when the resource ID
            // is a reference another Drawable resource. As a workaround, try
            // to resolve the drawable reference manually.
            final int resolvedId;
            synchronized (sLock) {
                if (sTempValue == null) {
                    sTempValue = new TypedValue();
                }
                context.getResources().getValue(id, sTempValue, true);
                resolvedId = sTempValue.resourceId;
            }
            return context.getResources().getDrawable(resolvedId);
        }
    }


4、为了解决以上2种问题我们使用到ContextCompat来解决

ContextCompat.getDrawable(context,R.drawable.verification_code)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值