【问题标题】:Using NewApi property still causes lint warnings使用 NewApi 属性仍然会导致 lint 警告
【发布时间】:2017-07-22 21:24:43
【问题描述】:

我创建了自己的扩展函数来检查 sdk 是否至少是棒棒糖

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

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

【问题讨论】:

  • 它不是函数,也不是扩展函数。它实际上是一个带有getter 的属性。你能展示一下你是如何使用它的代码吗?
  • @Les 哎呀我的错误。我把它放在一个带有我的扩展名的文件中,但我忘记了这不算作一个。我添加了一个示例用法,但它与将Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP替换为buildIsLollipopAndUp基本相同

标签: android kotlin android-lint


【解决方案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)

...不会抑制 lint。但是……

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    相关资源
    最近更新 更多