【发布时间】:2021-03-15 08:35:03
【问题描述】:
我正在处理一个将minSdkVersion 设置为25(又名Android 7.1)的项目。
由于这个版本相当高,所以我可以使用很多方法而不必担心向后兼容性。
例如,从Fragment 检索drawable 应该很简单:
context?.getDrawable(R.drawable.my_drawable)
在源码中,它的作用是:
return getResources().getDrawable(id, getTheme());
据我所知,API 21(Android 5.0)中引入了这种方法。
但是,我收到以下警告:
看ContextCompat.getDrawable(...)的源码:
if (Build.VERSION.SDK_INT >= 21) {
return context.getDrawable(id);
} else if (Build.VERSION.SDK_INT >= 16) {
return context.getResources().getDrawable(id);
} else { ... }
由于 min SDK 设置为 25,第一个 if 将始终被调用,这与我编写的代码相同。那么为什么会出现警告呢?
我可以用@SuppressLint("UseCompatLoadingForDrawables") 压制它,但它有点破坏目的......或者我可以遵循它......
这正常吗?我真的应该使用ContextCompat 及其附属机构,还是在某处设置来删除这样的false 警告?
PS:该项目也在使用 Android X。
【问题讨论】:
-
作为对这个问题的补充:更新的 lint 规则,即
UseCompatTextViewDrawableXml和UseAppTint,强制在 xml 中使用 compat app: 属性,这听起来也有点矫枉过正。对此有一个称职的答案会很棒。
标签: android android-studio androidx lint backwards-compatibility