繁体   English   中英

徽章 Drawable 正在从视图中剪切并且没有显示正确的方式 Android Kotlin

[英]Badge Drawable is cutting from view and not showing proper way Android Kotlin

嘿,我想显示可绘制的徽章。 我尝试了这里的代码BadgeDrawable 是否不适用于 FrameLayout 中的视图,例如按钮、图像、文本视图等? , BadgeDrawable 不会出现在 BottomNavigationView 以外的元素上Badge Drawable 不会显示 我成功展示,但问题是从侧边切割。

<FrameLayout
    android:id="@+id/container"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginEnd="24dp"
    android:clipChildren="false"
    android:clipToPadding="false"
    android:paddingStart="6dp"
    android:paddingTop="4dp"
    android:paddingEnd="9dp"
    android:paddingBottom="4dp"
    app:layout_constraintBottom_toBottomOf="@+id/xyz"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="@+id/xyz">

         <ImageView
             android:id="@+id/icon"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="start"
             android:src="@drawable/ic_settings"
             tools:ignore="ContentDescription" />

</FrameLayout>

活动.kt

fun addBadgeDrawable(count: Int, target: View, parent: FrameLayout, context: Context) {
        target.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
            override fun onGlobalLayout() {
                val badgeDrawable = BadgeDrawable.create(context)
                badgeDrawable.number = count
                badgeDrawable.badgeGravity = BadgeDrawable.TOP_END
                badgeDrawable.setBoundsFor(target, parent)
                parent.foreground = badgeDrawable
                target.viewTreeObserver.removeOnGlobalLayoutListener(this)
            }
        })
    }

    private fun BadgeDrawable.setBoundsFor(@NonNull anchor: View, @NonNull parent: FrameLayout) {
        val rect = Rect()
        parent.getDrawingRect(rect)
        this.bounds = rect
        this.updateBadgeCoordinates(anchor, parent)
    }

我正在设置徽章查看此代码行

addBadgeDrawable(10, binding.icon, binding.container, context)

输出

在此处输入图片说明

预期产出

在此处输入图片说明

为了避免切割,需要在FrameLayout中增加paddingTop和paddingEnd。 或者可能需要添加额外的 ConstraintLayout 作为 FrameLayout 的父级,并使用约束和填充。

希望这会对某人有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM