2012-10-24 80 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