我想在应用程序的菜单图标上方添加一个带有待处理事件数量的徽章,但正如您在下图中看到的那样,我遇到了一些问题。我无法让圆圈变得不透明,我不想看到圆圈后面的灰线和新图像被顶部切割
我想在操作栏的徽标图标(主页图标)上使用它,而不是在操作栏的任何其他菜单项中使用它,因此自定义操作视图不是一个选项
Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId);
bm = bm.copy(bm.getConfig(), true);
Paint circlePaint = new Paint();
circlePaint.setAntiAlias(true);
circlePaint.setColor(Color.RED);
circlePaint.setStyle(Paint.Style.FILL);
//circlePaint.setAlpha(255);
Paint textPaint = new Paint();
textPaint.setStyle(Style.FILL);
textPaint.setColor(Color.WHITE);
textPaint.setTextSize(23);
textPaint.setFakeBoldText(true);
Canvas canvas = new Canvas(bm);
canvas.drawCircle(bm.getWidth()/6, bm.getHeight()/5, 13, circlePaint);
canvas.drawText(text, bm.getWidth()/7 + 5, bm.getHeight()/3, textPaint);
return new BitmapDrawable(context.getResources(), bm);
任何帮助将不胜感激!
由于
答案 0 :(得分:2)
答案 1 :(得分:0)
答案 2 :(得分:0)
在res / menu中创建一个菜单项,并将actionLayout设置为您的布局
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/badge"
android:actionLayout="@layout/actionbar_badge_layout"
android:icon="@drawable/icn_menu_posts"
android:showAsAction="always">
</item>
</menu>
和你的布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="48dp"
android:layout_height="fill_parent"
android:layout_gravity="right" >
<!-- Menu Item Image -->
<ImageView
android:layout_width="48dp"
android:layout_height="fill_parent"
android:clickable="true"
android:src="@drawable/bkg_actionbar_notify_off" />
<!-- Badge Count -->
<TextView
android:id="@+id/actionbar_notifcation_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:padding="@dimen/padding_small"
android:text="99"
android:textColor="@color/holo_orange_dark" />
</RelativeLayout>
然后在你活动的onCreateOptionsMenu上做这样的事情......
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.badge, menu);
RelativeLayout badgeLayout = (RelativeLayout) menu.findItem(R.id.badge).getActionView();
TextView tv = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_textview);
tv.setText("12");
}
另请查看此answer。