2012-10-24 15 views
7

Jak mogę dynamicznie aktualizować ikonę menu ActionBar, aby wyświetlić "czerwoną odznakę" z numerem? (koncepcyjnie podobny do "nieprzeczytanej liczby wiadomości")dynamiczna ikona do rysowania dla elementu menu ActionBar? (Android, ActionBarSherlock)

Używam ActionBarSherlock w mojej aplikacji Android, na poziomie interfejsu API 10+ Moja aplikacja służy do mobilnego przechwytywania danych, a czasami użytkownik nie może natychmiast przesłać nowych danych, ale musi zapisz go lokalnie w telefonie (np. gdy łączność jest słaba)

Zawsze, gdy w telefonie są przechowywane "nieprzesłane" pozycje, chcę pokazać użytkownikowi pozycję menu (na pasku czynności), aby mogą kliknąć na działanie UnsubmittedItems i wywołać ładowanie ręcznie.

Idealnie, ten element menu będzie wyglądał jak graficznie prezentacja liczby nieprzesłanych przedmiotów (podobnie jak w przypadku wiadomości e-mail lub aplikacji sms pokazuje liczbę nieprzeczytanych wiadomości jako znaczek). Obecnie jestem po prostu robi:

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

i to działa, ale dwie kwestie: Wolałbym użyć ikony i utrzymać tytuł jako coś zrozumiałego („nieprzesłane”), a także, bym uwielbiam mieć tutaj niestandardowy układ lub projekt, np. czerwone kółko za numerem.

Myśli o tym, jak to osiągnąć? Do tej pory moje badania sugerują dwie możliwości:

  1. użyć lista poziom rozciągliwej, która jest precreated jakiegoś zakresu numerów (np 1, 2, 3 ... 10+), a następnie unsubmittedMenuItem.getIcon() (setLevel. numUnsubmitted)
  2. zbudować całą bitmapę całkowicie dynamicznie, korzystając z map bitowych i Canvas API

są one podobne w tym sensie, że ja renderowania tekstu do bitmapy (zarówno w trybie offline jak # 1 lub w locie jak # 2), ale byłoby wspaniale wykorzystać "natywny" rendering tekstu w ActionBar, jeśli to możliwe i po prostu wstawić za nim czerwone kółko jak w TextView.

Czy istnieje jakiś sposób ustawienia niestandardowego układu tylko dla rysunków ikon? (Nie jest to pełna actionLayout, tylko dla ikony?)

Odpowiedz

6

Istnieje wiele sposobów, aby to zrobić:

  1. Zastosowanie LayerDrawable i obrazy stos znaczek na górze ikony obrazu.
  2. Napisz niestandardową klasę, która rozciąga się od Drawable i rysuje ręcznie ikonę i znaczek.
  3. Użyj niestandardowego widoku elementu akcji z ikoną w postaci plakietki ImageView z nakładką TextView.
+0

dziękuję Jake (jestem wielkim fanem twojej pracy). Pozwól mi poświęcić trochę czasu na zajęcie się # 3 - literatura jest dość myląca, co do niestandardowego układu całego paska akcji w stosunku do konkretnego elementu menu, ale będę się jeszcze bardziej zagłębiał. –

+1

Opcja nr 3 to zdecydowanie droga i jest całkiem łatwa, gdy uda ci się przebrnąć przez wszystkie koncepcje/abstrakcje Androida. Błędnie pomyślałem, że "niestandardowy widok akcji" przejął cały pasek akcji (jak w często cytowanym przykładzie rozwijanego pola wyszukiwania), ale jeśli po prostu robisz wrap_content, możesz dość łatwo napisać niestandardową "ikonę". Dzięki! –

+0

@MikeRepass Mam do czynienia z podobnym problemem, czy mógłbyś podzielić się z nami swoim doświadczeniem? – NullPointer

Powiązane problemy