使用NewApi属性仍会导致lint警告

时间:2017-07-22 21:24:43

标签: android kotlin android-lint

我创建了自己的扩展功能,检查sdk是否至少是lollipop

inline val buildIsLollipopAndUp: Boolean
    get() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP

但是,如果我使用它,lint工具无法弄清楚我已经验证了我的api级别并仍然给了我新的api警告。反正有没有让这些警告消失并让lint工具认出我的支票?

一个简单的例子:

if (buildIsLollipopAndUp) ripple()
else fade()

ripple调用仅适用于棒棒糖及以上的圆形动画,fade是默认动画。

我的full example

@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()
}

请注意,我需要lint抑制器,以避免lint警告

1 个答案:

答案 0 :(得分:0)

看起来lint不知道如何扩展内联Kotlin变量。我没有检查它是否扩展为Java。稍后会这样做。

还注意到......

    if(!(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)) return
    val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)

...不会压制lint。但...

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
    val anim = ViewAnimationUtils.createCircularReveal(this, x, y, 0f, r).setDuration(duration)

...意愿。同样,我没有检查Java是否也是如此。

所以,我怀疑这是一个Kotlin / Java问题。我认为这是一个皮棉问题。