ActionBar菜单项的动态可绘制图标? (Android,ActionBarSherlock)

时间:2012-10-24 21:09:19

标签: android android-actionbar actionbarsherlock

如何动态更新ActionBar MenuItem的图标以显示带有数字的“红色徽章”? (概念上类似于“未读消息计数”)

我在Android应用程序中使用ActionBarSherlock,目标是API级别10+。我的应用程序用于移动数据捕获,有时,用户无法立即提交新数据,但必须在手机上本地保存(例如,当连接性较差时)。

每当手机本地存储“未提交”项目时,我想向用户显示一个菜单项(在操作栏中),以便他们可以点击进入UnsubmittedItems活动并手动触发上传。 / p>

理想情况,此菜单项将包含未提交项目数量的图形表示(类似于电子邮件或短信应用程序如何显示未读邮件的数量作为徽章)。目前,我只是在做:

unsubmittedMenuItem.setTitle( Integer.toString(numUnsubmitted) );

这有效,但有两个问题:我更喜欢使用Icon并将Title保持为可理解的东西(“未提交”),而且,我也希望在这里有一些自定义布局或设计,例如数字背后的红色圆圈背景。

关于如何实现这一目标的想法?到目前为止,我的研究提出了两种可能性:

  1. 使用为某些数字范围(例如1,2,3 ...... 10+)预先创建的关卡列表drawable,然后使用unsubmittedMenuItem.getIcon()。setLevel(numUnsubmitted)
  2. 使用Bitmap和Canvas API完全动态构建整个位图
  3. 这些在某种意义上是相似的,我将文本渲染成位图(像#1一样离线或像#2那样在飞行中),但如果利用ActionBar的“原生”文本渲染,那将是很好的。可以简单地在TextView中插入一个红色圆圈。

    有没有办法为图标drawable设置自定义布局? (不是完整的actionLayout,仅用于图标?)

1 个答案:

答案 0 :(得分:6)

有很多方法可以做到这一点:

  1. 使用LayerDrawable并在图标图像上堆叠徽章图像。
  2. 编写一个从Drawable延伸的自定义类,并手动绘制图标和徽章。
  3. 使用自定义操作项视图,并在ImageView中添加带有TextView徽章的图标。