2012-10-24 12 views
7

Come posso aggiornare dinamicamente l'icona di un MenuBit di ActionBar per mostrare un 'badge rosso' con un numero? (concettualmente simile al "conteggio messaggi non letti")icona dinamica disegnata per la voce di menu ActionBar? (Android, ActionBarSherlock)

Utilizzo ActionBarSherlock nella mia applicazione Android, livello di API di destinazione 10+. La mia applicazione è per l'acquisizione dati mobile e, a volte, l'utente non può inviare immediatamente nuovi dati ma deve salvarlo localmente sul telefono (ad esempio quando la connettività è scarsa)

Ogni volta che ci sono elementi "non inviati" memorizzati localmente sul telefono, mi piacerebbe mostrare all'utente una voce di menu (nella barra delle azioni) in modo che possono fare clic sull'attività UnsubmittedItems e attivare manualmente un caricamento

Idealmente, questa voce di menu avrà alcune presentazione del numero di articoli non inviati (simile a come un'e-mail o un'app per sms mostra il numero di messaggi non letti come badge). Attualmente, sto solo facendo:

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

E questo funziona, ma due problemi: preferisco utilizzare l'icona e mantenere il titolo come qualcosa di intellegibile ("non inviate") e, anche, mi piacerebbe amo avere un layout o un design personalizzato qui, ad esempio uno sfondo di cerchio rosso dietro il numero.

Pensieri su come realizzare questo? Finora la mia ricerca suggeriscono due possibilità:

  1. utilizzare un elenco di livello disegnabili che è precreated per qualche intervallo di numeri (ad esempio 1, 2, 3 ... 10+) e poi unsubmittedMenuItem.getIcon() setLevel (. numUnsubmitted)
  2. costruire l'intera bitmap interamente dinamico, utilizzando il bitmap e le API Canvas

Queste sono simili, nel senso che sto rendendo il testo in una bitmap (sia offline come # 1 o al volo come # 2), ma sarebbe bello sfruttare il rendering di testo "nativo" di ActionBar se possibile e semplicemente inserire un cerchio rosso dietro di esso come in un TextView.

C'è un modo per impostare un layout personalizzato solo per l'icona disegnabile? (NON è un actionLayout completa, solo per l'icona?)

risposta

6

Ci sono un sacco di modi per farlo:

  1. Usa LayerDrawable e le immagini dello stack distintivo in cima alla vostra immagine dell'icona.
  2. Scrive una classe personalizzata che si estende da Drawable e disegna l'icona e il badge manualmente.
  3. Utilizzare una vista di azione personalizzata con l'icona in un ImageView con una sovrapposizione TextView per il badge.
+0

grazie Jake (sono un grande fan del tuo lavoro tra l'altro). Lasciatemi passare un po 'di tempo cercando di risolvere il punto # 3 - la letteratura è piuttosto confusa su cosa sia un layout personalizzato per l'intera barra delle azioni rispetto a una voce di menu specifica, ma scaverò più a fondo. –

+1

L'opzione n. 3 è sicuramente la strada da percorrere ed è in realtà abbastanza semplice, una volta superata con successo tutti i concetti/astrazioni Android. Ho erroneamente pensato che una "vista azione personalizzata" occupasse l'intera barra delle azioni (come nell'esempio di casella di ricerca espandibile frequentemente citata), ma se si esegue wrap_content è possibile creare facilmente un'icona personalizzata. Grazie! –

+0

@MikeRepass Mi trovo di fronte a un problema simile, potresti condividere la tua esperienza con noi per favore? – NullPointer

Problemi correlati