Android 工具栏 home/up 指标未读计数

Android toolbar home/up indicator unread count

我有一个 master/detail 视图,我需要向 "up/home/back" 按钮添加未读计数。我已经使用 app:actionlayout 将未读计数添加到其他工具栏项目,但我认为这在这种情况下没有用。

我相信我需要获得对 home/up 菜单项的引用,并向其添加视图。如果是这种情况,我需要获得对菜单项的引用,这是我迄今为止未成功完成的事情。是否有另一种技术?

请尝试我的实现,看起来像这样

详细代码片段:

      final Toolbar toolbar = (Toolbar) activity.findViewById(R.id.detail_toolbar);
        if (toolbar != null) {
            final Drawable icon = toolbar.getNavigationIcon();
            if (icon != null) {
                if (icon instanceof BitmapDrawable) {
                    final BitmapDrawable bitmapDrw = (BitmapDrawable) icon;
                    final OverlayDrawable overlay = new OverlayDrawable(getResources(), bitmapDrw.getBitmap());
                    toolbar.setNavigationIcon(overlay);
                    overlay.setCount(1);
                }
            }
        }

可绘制代码:

public class OverlayDrawable extends BitmapDrawable {

private final Paint mPaintCircle;
private final Paint mPaintText;

private int mCount = 0;
private final Rect mTextBounds;

public OverlayDrawable(Resources res, Bitmap bitmap) {
    super(res, bitmap);

    mPaintCircle = new Paint(Paint.ANTI_ALIAS_FLAG);
    mPaintCircle.setColor(Color.RED);

    mPaintText = new Paint(Paint.ANTI_ALIAS_FLAG);
    mPaintText.setColor(Color.WHITE);

    mTextBounds = new Rect();

}

public void setCount(int count) {
    mCount = count;
}

@Override
public void draw(Canvas canvas) {
    super.draw(canvas);

    float minSize = Math.min(getIntrinsicWidth(), getIntrinsicHeight());
    float radius = minSize / 3.0f;
    float x = getIntrinsicWidth() - radius / 2;
    float y = minSize / 4.0f;
    mPaintText.setTextSize(1.5f * radius);
    canvas.drawCircle(x, y, radius, mPaintCircle);

    final String text = Integer.toString(mCount);
    mPaintText.getTextBounds(text, 0, text.length(), mTextBounds);

    canvas.drawText(text, x - mTextBounds.width() / 2.0f - mTextBounds.left - 1, y + mTextBounds.height() / 2.0f, mPaintText);
}

}