¿Cuál es la diferencia entre el estilo de TextView y los atributos de android:textAppearance?

3 minutos de lectura

Avatar de usuario de Miro Kropacek
Miró Kropacek

Si defino mi TextView como:

 <TextView
        style="@android:style/TextAppearance.DeviceDefault.Large"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

es básicamente lo mismo que hacer:

 <TextView
        android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

Yo sé eso style es una especie de calificador más amplio (es decir, uno no puede establecer todos los atributos en android:textAppearance) pero luego surge la pregunta: ¿por qué molestarse? ¿Hay alguna ventaja de usar android:textAppearance sobre style?

avatar de usuario de onmyway133
en mi camino133

De Estilos y Temas https://developer.android.com/guide/topics/ui/look-and-feel/themes#textappearance

Una limitación con los estilos es que solo puede aplicar un estilo a una vista. En un TextView, sin embargo, también puede especificar un atributo TextAppearance que funciona de manera similar a un estilo

TextAppearance le permite definir un estilo específico de texto mientras deja el estilo de una vista disponible para otros usos. Tenga en cuenta, sin embargo, que si define cualquier atributo de texto directamente en la Vista o en un estilo, esos valores anularán los valores de TextAppearance.

Parece que el estilo es un atributo para todas las vistas, incluso TextView y textAppearance solo aplican algunos ‘componentes de estilo’ que están disponibles solo para textos. Puede aplicar sus propios estilos en ambos usando estilos.xml

https://developer.android.com/guide/topics/resources/style-resource.html
https://developer.android.com/reference/android/R.attr.html#textApariencia

textoApariencia

Aspecto predeterminado del texto: color, tipo de letra, tamaño y estilo.

estilo

Esto se aplica a todo

Puede combinar Estilos con TextAppearance.
Por ejemplo, en TextAppearance establece toda la lógica relacionada con el texto para un botón.
En un estilo, puede reutilizarlo y agregar atributos adicionales, como relleno, tamaño, etc.

Por ejemplo,

<style name="TextAppearanceTitle" parent="TextAppearance.MaterialComponents.Button">
    <item name="android:textColor">#f0f</item>
</style>

<style name="SomeButtonStyle" parent="Widget.MaterialComponents.Button.UnelevatedButton">
    <item name="android:textAppearance">@style/TextAppearanceTitle</item>
    <item name="android:padding">12dp</item>
    <item name="android:elevation">4dp</item>
</style>

Puede ser útil para alguien, aquí está la lista de atributos admitidos para TextAppearance de TextView:

<attr name="textColor" />
<attr name="textSize" />
<attr name="textStyle" />
<attr name="typeface" />
<attr name="fontFamily" />
<attr name="textColorHighlight" />
<attr name="textColorHint" />
<attr name="textColorLink" />
<attr name="textAllCaps" format="boolean" />
<attr name="shadowColor" format="color" />
<attr name="shadowDx" format="float" />
<attr name="shadowDy" format="float" />
<attr name="shadowRadius" format="float" />
<attr name="elegantTextHeight" format="boolean" />
<attr name="letterSpacing" format="float" />
<attr name="fontFeatureSettings" format="string" />

Todas las cosas restantes las configuras en un estilo.

  • ¿Por qué el tamaño automático no es parte de la apariencia del texto? debe estar relacionado con el texto

    – htafoya

    29 de julio a las 18:02

Solo puede tener un atributo de estilo por vista, pero usar TextAppearance le permite, en esencia, definir un estilo usando el conjunto restringido de atributos relevantes para el texto. Puede usar un estilo y un TextAppearance en una vista.

¿Ha sido útil esta solución?