Android从drawable资源取Bitmap,如何适配ContextCompat.getDrawable建议
该建议的含义
- 你原来直接调用的
getDrawable()方法是Android 6.0(API level 23)才新增的Context类方法,如果你的应用设置的minSdkVersion低于23,该代码在Android 5.1及更低版本的设备上运行时会直接抛出NoSuchMethodError崩溃,你当前测试能正常运行只是因为你用的测试设备系统版本≥23。 - Android Studio提示你用的
ContextCompat.getDrawable()是AndroidX兼容库提供的适配方法,内部已经自动处理了不同系统版本的逻辑差异,可以兼容所有符合AndroidX要求的系统版本,不需要你手动做版本判断,稳定性更高,是Android官方推荐的资源读取最佳实践。
代码修改方式
首先确认你的项目已经引入AndroidX兼容包(目前Android Studio新建项目默认都会引入,无需额外配置),修改后的代码如下:
// 注意第一个参数传入当前上下文实例,Activity内直接传this即可 Drawable drawable = ContextCompat.getDrawable(this, R.drawable.avatar_bpm); // 增加类型判断和非空校验,避免强转异常或空指针 if (drawable instanceof BitmapDrawable) { Bitmap avatar = ((BitmapDrawable) drawable).getBitmap(); // 此处写你后续使用avatar的业务逻辑 }
内容的提问来源于stack exchange,提问作者cat15ets
相关产品推荐
相关产品推荐

