我想在运行时检查 Android SDK版本。我试过这样:
fun Context.getDrawableById(resId : Int) : Drawable {
when (Build.VERSION.SDK_INT) {
in Int.MIN_VALUE..20 -> return resources.getDrawable(resId)
else -> return getDrawable(resId)
}
}
我收到了编译器警告“调用需要API级别21(当前最小值为19)”。所以我改变了我的代码:
fun Context.getDrawableById(resId : Int) : Drawable {
if (Build.VERSION.SDK_INT < 21)
return resources.getDrawable(resId)
else
return getDrawable(resId)
}
没有编译器警告。
我的问题是:在没有编译器警告的情况下,是否可以使用when
?怎么样?
答案 0 :(得分:4)
是否可以使用&#34;当&#34;在这种情况下没有编译器警告?
是的,使用ContextCompat.getDrawable()
代替context.getDrawable()
:
fun View.getDrawable(resId : Int): Drawable? =
when (Build.VERSION.SDK_INT) {
in Int.MIN_VALUE..20 -> resources.getDrawable(resId)
else -> ContextCompat.getDrawable(context, resId)
}
请注意,ContextCompat.getDrawable()
会返回可选类型Drawable?
。