2011-12-16 12 views
7

Nella mia app ho un aspetto simile alle etichette nell'interfaccia utente dell'applicazione GMail. Per coloro che potrebbero non sapere, appaiono come questi (le etichette sono queste barre colorate): Gmail screenshotBackgroundColorSpan con imbottitura verticale aggiuntiva

Per ottenere un effetto simile, utilizzo i drawable a nove patch - per ogni etichetta sto creando un TextView e assegnandogli un drawable . Questa è una soluzione semplice, ma non mi piace. Non è elegante, è piuttosto lento come mostrato dal profiler, e non penso che sia il modo giusto per farlo.

Ho modificato il design dell'interfaccia utente per renderlo più "ICS-y", quindi ho rimosso gli angoli arrotondati dalle etichette. E ho iniziato a pensare a come sostituire la soluzione a 9 patch. La cosa più ovvia è usare BackgroundColorSpan. Ma ha uno, piccolo inconveniente. Voglio che le mie etichette abbiano un po 'di padding. Con i drawable, è stato facile da raggiungere. Con gli span, è più difficile. Per rendere orizzontale il riempimento, posso solo aggiungere spazi all'inizio e alla fine della stringa. Ma come rendere più grande l'imbottitura verticale? Per chiarire le cose, questo è uno screenshot del un'etichetta con BackgroundColorSpan:

enter image description here

Voglio fare le parti colorate sopra e sotto il testo più grande. Penso che dovrei usare una specie di MetricAffectingSpan, ma non riuscivo a capire quale. O forse dovrei scrivere il mio? O, infine, forse gli span non sono in grado di soddisfare le mie esigenze e dovrei stare con le immagini o creare una tela e disegnare "manualmente" tutto come nell'app GMail?

risposta

2

Il modo più semplice per farlo, e sono abbastanza sicuro che l'app GMAIL ne faccia uso, sono forme.

Basta creare un numero personalizzato shape, nel tuo caso una forma rettangolare con angoli arrotondati e un colore a tinta unita e assegnare questo drawable alla proprietà di sfondo della tua visualizzazione testo.

Una forma è definita in xml. Si assegnarlo come segue:

<TextView 
    ... 
    android:background="@drawable/my_awesome_shape" /> 
+0

+1 per le forme, si può anche fare alcune cose avanzate come l'aggiunta di ombra, ecc combinando forme. – Guillaume

+0

Grazie! Questo è sicuramente un miglioramento rispetto alle immagini. Ma Spans mi permetterebbe di mostrare due o più etichette in una TextView - forme, correggermi se ho torto, non permettermi di farlo facilmente? – user1234567

+0

Questo è corretto, in quanto è possibile utilizzare le forme esattamente come drawable - in quanto non sono altro che drawable. – poitroae