我需要在右上角的 Material 芯片上显示徽章。我怎样才能轻松做到?
I need to show a badge on Material chip at the right top. How can I easily do it?
我正在尝试这种方式
override fun draw(canvas: Canvas) {
super.draw(canvas)
val viewWidth = width.toFloat()
val padding = chipEndPadding
canvas.drawOval(viewWidth - padding, padding, viewWidth, padding + padding, paint)
}
但它似乎没有出现,可能是因为 chipDrawable。任何方式来实现这一点。此方法适用于所有其他视图,但不适用于芯片!
您可以使用 Material 组件库提供的 BadgeDrawable
。
在您的布局中:
<com.google.android.material.chip.Chip
android:id="@+id/chip"
然后:
chip.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
BadgeDrawable badgeDrawable = BadgeDrawable.create(MainActivity.this);
badgeDrawable.setNumber(4);
badgeDrawable.setVerticalOffset(25);
badgeDrawable.setHorizontalOffset(15);
BadgeUtils.attachBadgeDrawable(badgeDrawable, chip, null);
chip.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
getViewTreeObserver
对我来说效果不佳,造成了一些问题,但是
View.post()
方法更容易工作:
public void showBadgeOnView(View view, int someNumber, Context context) {
BadgeDrawable badgeDrawable = BadgeDrawable.create(context);
badgeDrawable.setNumber(someNumber);
view.post(() ->BadgeUtils.attachBadgeDrawable(badgeDrawable, view, null));
}
我正在尝试这种方式
override fun draw(canvas: Canvas) {
super.draw(canvas)
val viewWidth = width.toFloat()
val padding = chipEndPadding
canvas.drawOval(viewWidth - padding, padding, viewWidth, padding + padding, paint)
}
但它似乎没有出现,可能是因为 chipDrawable。任何方式来实现这一点。此方法适用于所有其他视图,但不适用于芯片!
您可以使用 Material 组件库提供的 BadgeDrawable
。
在您的布局中:
<com.google.android.material.chip.Chip
android:id="@+id/chip"
然后:
chip.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
BadgeDrawable badgeDrawable = BadgeDrawable.create(MainActivity.this);
badgeDrawable.setNumber(4);
badgeDrawable.setVerticalOffset(25);
badgeDrawable.setHorizontalOffset(15);
BadgeUtils.attachBadgeDrawable(badgeDrawable, chip, null);
chip.getViewTreeObserver().removeOnGlobalLayoutListener(this);
}
});
getViewTreeObserver
对我来说效果不佳,造成了一些问题,但是
View.post()
方法更容易工作:
public void showBadgeOnView(View view, int someNumber, Context context) {
BadgeDrawable badgeDrawable = BadgeDrawable.create(context);
badgeDrawable.setNumber(someNumber);
view.post(() ->BadgeUtils.attachBadgeDrawable(badgeDrawable, view, null));
}