Mac*_*ich 5 android lint backwards-compatibility android-studio androidx
我正在开发一个项目,minSdkVersion设置为25(又名 Android 7.1)。
由于这个版本相当高,所以我可以使用很多方法,而不用担心向后兼容性。
例如,drawable从 a检索 a Fragment, 应该如此简单:
context?.getDrawable(R.drawable.my_drawable)
Run Code Online (Sandbox Code Playgroud)
在源码中,它的作用是:
return getResources().getDrawable(id, getTheme());
Run Code Online (Sandbox Code Playgroud)
据我了解,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 { ... }
Run Code Online (Sandbox Code Playgroud)
由于min SDK设置为25,第一个if将始终被调用,然后与我编写的代码相同。那么为什么会出现警告呢?
我可以压制它,@SuppressLint("UseCompatLoadingForDrawables")但它有点挫败了目的……或者我可以遵循它……
这是正常的吗?我是否应该真正使用ContextCompat及其附属公司,或者是否有某个设置可以删除此类错误警告?
PS:该项目也使用Android X。
遇到了同样的问题。当您的 minSdk >= 21 时,我想说这是误报。因为正如您所说,您将始终进入调用 getDrawable 的 if 分支。
因此,抑制/忽略它是一种方法,直到有人可以使 lint 规则足够智能,以检测到您的 minSdkVersion 高于 21。您可以通过在 build.gradle 中执行以下操作来全局忽略它:
android {
...
lintOptions {
ignore("UseCompatLoadingForDrawables")
}
}
Run Code Online (Sandbox Code Playgroud)
有趣的context.getColor(R.color.something)是,即使它在ContextCompat.getColor.
| 归档时间: |
|
| 查看次数: |
1871 次 |
| 最近记录: |