使用何时使用Kotlin检查Android SDK版本

时间:2018-06-07 08:57:56

标签: android android-studio sdk kotlin

我想在运行时检查 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?怎么样?

1 个答案:

答案 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?