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

Mik*_*ass 7 android actionbarsherlock android-actionbar

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

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

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

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

unsubmittedMenuItem.setTitle( Integer.toString(numUnsubmitted) );
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 使用为某些数字范围(例如1,2,3 ... 10+)预先创建的级别列表drawable,然后使用unsubmittedMenuItem.getIcon().setLevel(numUnsubmitted)
  2. 使用Bitmap和Canvas API完全动态地构建整个位图

这些在我将文本渲染为位图的意义上是相似的(像#1一样离线或像#2一样在飞行中)但是如果可能的话,利用ActionBar的"原生"文本渲染会很棒像在TextView中一样在它后面插入一个红色圆圈.

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

Jak*_*ton 6

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

  1. LayerDrawable在图标图像上使用并堆叠徽章图像.
  2. 编写一个自定义类,它Drawable可以手动扩展并绘制图标和徽章.
  3. 使用带有图标的自定义操作项视图,ImageView其中包含TextView徽章的叠加层.

  • @Jake:我曾尝试过选项3,但这会在动作栏中生成一个视图,当点击时不会显示在点击actionItem时显示的默认背景.此外,actionItem的高度和宽度不包括此customView的填充.选项2:我尝试使用我的CustomDrawable完成相同的操作,但是它显示在actionItem的右下角.(但我仍然希望使用CustomDrawable).您是否知道如何在actionItem的中心显示customDrawable. (2认同)