Использование свойства NewApi по-прежнему вызывает предупреждения lint
Я создал свою собственную функцию расширения, которая проверяет, является ли SDK по крайней мере леденец
inline val buildIsLollipopAndUp: Boolean
get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP
Однако, если я воспользуюсь этим, инструменты lint не смогут понять, что я проверил свой уровень API и по-прежнему выдают мне новые предупреждения API. Есть ли способ заставить эти предупреждения исчезнуть, и инструменты ворса распознают мой чек?
Простой пример:
if (buildIsLollipopAndUp) ripple()
else fade()
куда ripple
вызывает круговую анимацию, которая доступна только для леденцов и выше, и fade
это анимация по умолчанию.
Мой полный пример:
@SuppressLint("NewApi")
@KauUtils fun View.circularReveal(x: Int = 0, y: Int = 0, offset: Long = 0L, radius: Float = -1.0f, duration: Long = 500L, onStart: (() -> Unit)? = null, onFinish: (() -> Unit)? = null) {
if (!isAttachedToWindow) {
onStart?.invoke()
visible()
onFinish?.invoke()
return
}
if (!buildIsLollipopAndUp) return fadeIn(offset, duration, onStart, onFinish)
val r = if (radius >= 0) radius
else Math.max(Math.hypot(x.toDouble(), y.toDouble()), Math.hypot((width - x.toDouble()), (height - y.toDouble()))).toFloat()
val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)
anim.startDelay = offset
anim.addListener(object : AnimatorListenerAdapter() {
override fun onAnimationStart(animation: Animator?) {
visible()
onStart?.invoke()
}
override fun onAnimationEnd(animation: Animator?) = onFinish?.invoke() ?: Unit
override fun onAnimationCancel(animation: Animator?) = onFinish?.invoke() ?: Unit
})
anim.start()
}
Обратите внимание, что мне нужен подавитель ворса, чтобы избежать предупреждений о ворсе
1 ответ
Это выглядит как lint
не знает, как развернуть встроенную переменную Kotlin на месте. Я не проверял, расширяется ли это для Java. Сделаем это позже.
Также отметил...
if(!(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)) return
val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)
... не будет подавлять пух. Но...
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)
...будут. Опять же, я не проверял, верно ли то же самое для Java.
Поэтому я сомневаюсь, что это проблема Kotlin/Java. Я думаю, что это проблема мусора.