2012-10-24 40 views
7

如何动态更新ActionBar MenuItem的图标以显示带有数字的“红色徽章”? (概念上类似于“未读消息数”)ActionBar菜单项的动态可绘制图标? (Android,ActionBarSherlock)

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

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

理想情况下,这个菜单项会有一些图形化的提交未提交的项目数量(类似于电子邮件或短信应用程序将未读邮件数量显示为徽章的数量)。目前,我只是在做:

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

而这个工作,但两个问题:我宁愿使用的图标,并保持标题的东西理解(“未提交”),并且还,我想喜欢在这里有一些自定义的布局或设计,如数字背后的红色圆圈背景。

有关如何完成此任务的想法?到目前为止,我的研究表明两种可能:

  1. 使用水平仪列表绘制的是预先创建的某些范围内的数字(如1,2,3 ... 10+),然后unsubmittedMenuItem.getIcon()setLevel(。 numUnsubmitted)
  2. 建立整个位图完全动态的,使用位图和Canvas API的

这些都是在我呈现文本为位图(或者像离线#1或对飞的感觉相似像#2),但如果可能的话,利用ActionBar的“本地”文本渲染并且简单地在它后面插入像红圈一样的TextView会很好。

是否有某种方法可以为可绘制图标设置自定义布局? (不是全actionLayout,只是图标?)

回答

6

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

  1. 使用LayerDrawable和堆栈徽章图片上你的图标图像的顶部。
  2. 编写一个从Drawable开始的自定义类,并手动绘制图标和徽章。
  3. 使用自定义操作项目视图与ImageView中的图标以TextView覆盖徽章。
+0

谢谢杰克(我是你工作btw的巨大粉丝)。让我花一些时间试图解决#3 - 关于整个操作栏与特定菜单项的自定义布局,文献相当混乱,但我会深入研究。 –

+1

一旦您成功通过所有Android概念/抽象,选项#3绝对是您的选择,实际上非常简单。我错误地认为'自定义操作视图'接管了整个操作栏(如在经常引用的扩展搜索框示例中),但是如果您只是执行wrap_content,则可以非常容易地创建自定义“图标”。谢谢! –

+0

@MikeRepass我遇到过类似的问题,请问您可以与我们分享您的经验吗? – NullPointer