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): BackgroundColorSpan 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:
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?
+1 per le forme, si può anche fare alcune cose avanzate come l'aggiunta di ombra, ecc combinando forme. – Guillaume
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
Questo è corretto, in quanto è possibile utilizzare le forme esattamente come drawable - in quanto non sono altro che drawable. – poitroae