我需要在右上角的 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));
}