2011-12-16 25 views
7

En mi aplicación tengo algo similar en apariencia a las etiquetas en la interfaz de usuario de la aplicación GMail. Para aquellos que no lo sepan, se ven así (las etiquetas son estas barras de colores): Gmail screenshotBackgroundColorSpan con relleno adicional vertical

Para lograr un efecto similar, utilizo los nueve encastres: para cada etiqueta, estoy creando un TextView y le asigno dibujable . Esta es una solución simple, pero no me gusta. No es elegante, es bastante lento, como lo muestra Profiler, y simplemente no creo que sea la manera correcta de hacerlo.

Cambié el diseño de la interfaz de usuario para hacerlo más "ICS-y", así que eliminé las esquinas redondeadas de las etiquetas. Y comencé a pensar cómo podría reemplazar la solución de 9 parches. Lo más obvio es usar BackgroundColorSpan. Pero tiene una pequeña desventaja. Quiero que mis etiquetas tengan algo de relleno. Con drawables, fue fácil de lograr. Con tramos, es más difícil. Para hacer un relleno horizontal, puedo agregar espacios al principio y al final de la cadena. Pero, ¿cómo hacer más grande el relleno vertical? Para aclarar las cosas, esto es una captura de pantalla de la etiqueta con BackgroundColorSpan:

enter image description here

Quiero hacer las partes coloreadas por encima y por debajo del texto más grande. Creo que debería usar algún tipo de MetricAffectingSpan, pero no pude determinar cuál. ¿O tal vez debería escribir el mío? O, finalmente, ¿quizás los intervalos no son capaces de satisfacer mis necesidades y debería quedarme con las imágenes o crear un lienzo y dibujar todo "manualmente" como en la aplicación de GMail?

Respuesta

2

La forma más fácil de hacer esto, y estoy bastante seguro de que la aplicación GMAIL está haciendo uso de ella, son las formas.

Simplemente cree un shape personalizado, en su caso una forma rectangular con esquinas redondeadas y un color sólido, y asigne este dibujable a la propiedad de fondo de su vista de texto.

Una forma se define en xml. Se le asignará de la siguiente manera:

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

+1 para las formas, también puede hacer algunas cosas avanzadas como la adición de sombra, etc. mediante la combinación de formas. – Guillaume

+0

Gracias! Eso es definitivamente una mejora sobre las imágenes. Pero Spans me permitiría mostrar dos o más etiquetas en un TextView: formas, corrígeme si estoy equivocado, ¿no me permiten hacer esto fácilmente? – user1234567

+0

Esto es correcto, ya que puede usar formas exactamente igual que las dibujables, ya que no son más que dibujables. – poitroae

Cuestiones relacionadas