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

7
如何动态更新ActionBar MenuItem的图标以显示带数字的“红色徽章”?(概念上类似于“未读消息计数”)我在我的Android应用程序中使用ActionBarSherlock,目标API级别为10+。我的应用程序是用于移动数据捕获的,有时用户不能立即提交新数据,而必须将其保存在手机上(例如当连接质量较差时)。每当在手机上存储了“未提交”的项目时,我都希望向用户显示一个菜单项(在操作栏中),以便他们可以单击到UnsubmittedItems活动并手动触发上传。理想情况下,此菜单项将具有某些未提交项目数量的图形表示(类似于电子邮件或短信应用程序将未读消息数量显示为徽章)。目前,我只是执行以下操作:
unsubmittedMenuItem.setTitle( Integer.toString(numUnsubmitted) );

这样做是可行的,但存在两个问题:我更喜欢使用图标并将标题设置为易懂的内容(例如,“未提交”),此外,我想在数字后面添加一些自定义布局或设计,例如红色圆形背景。
你有什么想法吗?到目前为止,我的研究表明有两种可能性:
1.使用预先创建好某个数字范围(例如1、2、3...10+)的级别列表可绘制对象,然后unsubmittedMenuItem.getIcon().setLevel( numUnsubmitted )。
2.完全动态地构建整个位图,使用位图和画布API。
这些方法类似,因为都要将文本呈现为位图(像第一种方法那样离线处理,或者像第二种方法那样实时处理),但如果可能的话,利用ActionBar的“本地”文本呈现并插入一个红色圆圈就像在TextView中一样会很好。
是否有一种方法可以仅为图标可绘制对象设置自定义布局?(不是完整的actionLayout,仅适用于图标?)
1个回答

6
有很多方法可以实现这一点:
  1. 使用LayerDrawable并将徽章图像叠加在您的图标图像上。
  2. 编写一个扩展自Drawable的自定义类,手动绘制图标和徽章。
  3. 使用自定义操作项视图,在ImageView中使用您的图标和一个带有TextView覆盖层的徽章。

谢谢Jake(顺便说一下,我是你的超级粉丝)。让我花点时间尝试解决第三个问题——文献对于整个操作栏自定义布局和特定菜单项的定义相当混乱,但我会深入挖掘。 - Mike Repass
1
第三个选项绝对是正确的选择,而且一旦你成功地理解了所有的Android概念和抽象,它其实非常容易。我曾经错误地认为“自定义操作视图”会接管整个操作栏(就像经常引用的扩展搜索框示例中那样),但如果你只是使用wrap_content,你可以很容易地创建一个自定义的“图标”。谢谢! - Mike Repass
@MikeRepass 我面临着类似的问题,你能和我们分享一下你的经验吗? - Ali
2
@Jake:我尝试了选项3,但是这会导致在操作栏中显示一个视图,当单击时不会显示默认背景,该背景在单击ActionItem时显示。此外,ActionItem的高度和宽度不包括像这个CustomView一样的填充。选项2:我尝试使用我的CustomDrawable来实现相同的效果,但它显示在ActionItem的右下角。(但我仍然想使用CustomDrawable)。您有没有任何关于如何在ActionItem的中心显示CustomDrawable的想法? - AndoAiron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接