[英]Badge Drawable is cutting from view and not showing proper way Android Kotlin
Hey I want to show badge drawable.嘿,我想显示可绘制的徽章。 I tried code from here Does BadgeDrawable not work for views within a FrameLayout such as buttons, images, textviews etc.?
我尝试了这里的代码BadgeDrawable 是否不适用于 FrameLayout 中的视图,例如按钮、图像、文本视图等? , BadgeDrawable does not appear on elements other than BottomNavigationView , Badge Drawable not showing .
, BadgeDrawable 不会出现在 BottomNavigationView 以外的元素上, Badge Drawable 不会显示。 I successfully show but problem is cutting from side edge.
我成功展示,但问题是从侧边切割。
<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>
activity.kt活动.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)
}
I am setting badge view this code line我正在设置徽章查看此代码行
addBadgeDrawable(10, binding.icon, binding.container, context)
Output输出
Expected Output预期产出
To avoid cutting, you need to increase paddingTop and paddingEnd in FrameLayout.为了避免切割,需要在FrameLayout中增加paddingTop和paddingEnd。 Or may be need to add additional ConstraintLayout as a parent for FrameLayout, and play with constraints and paddings.
或者可能需要添加额外的 ConstraintLayout 作为 FrameLayout 的父级,并使用约束和填充。
Hope this will help to someone.希望这会对某人有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.