尝试转换 "attachBadgeDrawable" 时的 Kotlin 问题:此声明是可选的

Kotlin issue when trying to cast "attachBadgeDrawable": This declaration is opt-in

我会在 Button 上的 Android 应用程序中使用 BadgeDrawable,问题是当我尝试设置按钮布局时 badgeDrawable 通过 attachBadgeDrawable 我收到一条错误消息:

his declaration is opt-in and its usage should be marked with  '@com.google.android.material.badge.ExperimentalBadgeUtils' or '@OptIn(markerClass = com.google.android.material.badge.ExperimentalBadgeUtils.class)'

我使用那段代码的代码如下:

            btnInvia.viewTreeObserver.addOnGlobalLayoutListener(
                object : OnGlobalLayoutListener {
                    override fun onGlobalLayout() {
                        val badgeDrawable = BadgeDrawable.create(requireContext())
                        badgeDrawable.number = corpo
                        badgeDrawable.verticalOffset = 20
                        badgeDrawable.horizontalOffset = 15
                        BadgeUtils.attachBadgeDrawable(badgeDrawable, btnInvia, layoutInvia)
                        btnInvia.viewTreeObserver.removeOnGlobalLayoutListener(this)
                    }

                }
            )

如果有用的话最小 SDK 是 24。

classBadgeUtils用androidx注解@Experimental标注。通过这种方式,报告了实验性 API 在这种情况下的用法,级别 = ERROR.

在您的方法中,您必须使用这些注释之一来禁止报告:

@ExperimentalBadgeUtils
@UseExperimental(markerClass = ExperimentalBadgeUtils::class)
fun onCreate(savedInstanceState: Bundle?) {
    //...
   btnInvia.viewTreeObserver.addOnGlobalLayoutListener(
      //..
   )
}

你也可以使用kotlin注解@OptIn:

@OptIn(ExperimentalBadgeUtils::class)
fun onCreate(savedInstanceState: Bundle?) {
        //...
       btnInvia.viewTreeObserver.addOnGlobalLayoutListener(
          //..
       )
}