Android开发:无需版本检测获取getDrawable及其他资源的方法?
简洁处理Android版本兼容的资源获取方式
当然有更简洁的办法啦!你可以通过封装工具方法或者利用AndroidX的兼容API,彻底摆脱重复的if-else版本判断,让代码清爽很多:
方法一:封装全局工具类
把版本判断逻辑封装成一个可复用的工具方法,之后每次调用只需一行代码:
public class ResourceUtils { public static Drawable getDrawable(Context context, int resId) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { return context.getDrawable(resId); } else { return context.getResources().getDrawable(resId); } } }
使用示例:
imageView.setImageDrawable(ResourceUtils.getDrawable(this, R.drawable.ic_circled_v));
方法二:使用AndroidX兼容库(推荐)
如果你的项目已经接入AndroidX,直接用ContextCompat类的兼容方法就好,它内部已经帮你处理了所有版本适配逻辑,完全不用自己写判断:
imageView.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.ic_circled_v));
这是官方推荐的做法,不仅针对Drawable,像颜色获取这类常见需求,ContextCompat也提供了ContextCompat.getColor(context, resId)这类兼容方法,同样能省去版本判断的麻烦。
内容的提问来源于stack exchange,提问作者Dishonered
相关产品推荐
相关产品推荐

