[英]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.