¿Valores válidos para android:fontFamily y a qué se asignan?

Resuelto Christopher Perry asked hace 54 años • 3 respuestas

En la respuesta a esta pregunta, el usuario enumera valores para android:fontFamilyy 12 variantes (ver más abajo). ¿De dónde vienen estos valores? La documentación de android:fontFamilyno incluye esta información en ningún lugar (revisé aquí y aquí ). Las cadenas se enumeran en el archivo estilos.xml de Android en varios lugares, pero ¿cómo se asignan a la fuente Roboto?

A partir de Android 4.1/4.2, están disponibles las siguientes familias de fuentes Roboto:

android:fontFamily="sans-serif"           // roboto regular  
android:fontFamily="sans-serif-light"     // roboto light  
android:fontFamily="sans-serif-condensed" // roboto condensed  
android:fontFamily="sans-serif-thin"      // roboto thin (android 4.2)  
android:fontFamily="sans-serif-medium"    // roboto medium (android 5.0)

en combinación con esto

android:textStyle="normal|bold|italic" 

Son posibles 12 variantes:

  • Regular
  • Itálico
  • Atrevido
  • Negrita cursiva
  • Luz
  • Cursiva ligera
  • Delgado
  • Cursiva fina
  • Regular condensado
  • cursiva condensada
  • Negrita condensada
  • Negrita-cursiva condensada

En el styles.xmlarchivo de la aplicación en el que estoy trabajando, alguien incluyó esto como familia de fuentes, y estoy bastante seguro de que está mal:

<item name="android:fontFamily">Roboto-Regular.ttf</item>

Me gustaría configurar correctamente el tema de nuestra aplicación (lo que incluye el uso correcto de fontFamily) y eliminar toda la redundancia que hay en algunos de los estilos que se crearon antes de echar un vistazo al archivo.

Christopher Perry avatar Jan 01 '70 08:01 Christopher Perry
Aceptado

¿De dónde vienen estos valores? La documentación para android:fontFamily no incluye esta información en ningún lugar

De hecho, estos no figuran en la documentación. Pero se mencionan aquí en la sección 'Familias de fuentes'. El documento enumera todas las nuevas API públicas para Android Jelly Bean 4.1.

En el archivo estilos.xml de la aplicación en la que estoy trabajando, alguien incluyó esto como familia de fuentes y estoy bastante seguro de que está mal:

Sí, eso está mal. No hace referencia al archivo de fuente, debe usar el nombre de fuente mencionado en el documento vinculado anteriormente. En este caso debería haber sido este:

<item name="android:fontFamily">sans-serif</item>

Como ya se indicó en la respuesta vinculada, son posibles 12 variantes:

Agregado en Android Jelly Bean (4.1) - API 16:

Regular (predeterminado):

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item> 

Cursiva :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">italic</item>

Atrevido :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item>

Negrita cursiva :

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold|italic</item>

Luz :

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">normal</item>

Cursiva ligera :

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">italic</item>

Delgado :

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">normal</item>

Cursiva fina :

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">italic</item>

Regular condensado :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">normal</item>

Cursiva condensada :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">italic</item>

Negrita condensada :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold</item>

Negrita-cursiva condensada :

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold|italic</item>

Agregado en Android Lollipop (v5.0) - API 21:

Medio :

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">normal</item>

Cursiva media :

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">italic</item>

Negro :

<item name="android:fontFamily">sans-serif-black</item>
<item name="android:textStyle">italic</item>

Para una referencia rápida, así es como se ven todos:

Ahmad avatar Oct 30 '2013 19:10 Ahmad

Fuentes disponibles (a partir de Oreo)

Vista previa de todas las fuentes

La página Material Design Typography tiene demostraciones de algunas de estas fuentes y sugerencias sobre cómo elegir fuentes y estilos.

Para detectives de códigos: fonts.xmles la lista definitiva y en constante expansión de fuentes de Android.


Usando estas fuentes

Establezca los atributos android:fontFamilyy android:textStyle, por ejemplo

<!-- Roboto Bold -->
<TextView
    android:fontFamily="sans-serif"
    android:textStyle="bold" />

a los valores deseados de esta tabla:

Font                     | android:fontFamily          | android:textStyle
-------------------------|-----------------------------|-------------------
Roboto Thin              | sans-serif-thin             |
Roboto Light             | sans-serif-light            |
Roboto Regular           | sans-serif                  |
Roboto Bold              | sans-serif                  | bold
Roboto Medium            | sans-serif-medium           |
Roboto Black             | sans-serif-black            |
Roboto Condensed Light   | sans-serif-condensed-light  |
Roboto Condensed Regular | sans-serif-condensed        |
Roboto Condensed Medium  | sans-serif-condensed-medium |
Roboto Condensed Bold    | sans-serif-condensed        | bold
Noto Serif               | serif                       |
Noto Serif Bold          | serif                       | bold
Droid Sans Mono          | monospace                   |
Cutive Mono              | serif-monospace             |
Coming Soon              | casual                      |
Dancing Script           | cursive                     |
Dancing Script Bold      | cursive                     | bold
Carrois Gothic SC        | sans-serif-smallcaps        |

(Noto Sans es una fuente alternativa; no puedes especificarla directamente)

Nota: esta tabla se deriva de fonts.xml. El nombre de familia y el estilo de cada fuente se enumeran en fonts.xml, por ejemplo

<family name="serif-monospace">
    <font weight="400" style="normal">CutiveMono.ttf</font>
</family>

serif-monospacees por tanto la familia tipográfica y normales el estilo.


Compatibilidad

Según el registro de fonts.xml y el anterior system_fonts.xml , puede ver cuándo se agregó cada fuente:

  • Ice Cream Sandwich: Roboto regular, negrita, cursiva y negrita cursiva
  • Jelly Bean: Roboto claro, cursiva ligera, condensado, negrita condensada, cursiva condensada y cursiva negrita condensada
  • Jelly Bean MR1: Roboto fino y cursiva fina
  • Chupete:
    • Roboto cursiva media, cursiva media, negro y cursiva negra
    • Noto Serif regular, negrita, cursiva, negrita cursiva
    • mono lindo
    • Muy pronto
    • Guión de baile
    • Carrois Gótico SC
    • Noto Sans
  • Oreo MR1: medio condensado Roboto
Newtonx avatar Jun 06 '2014 00:06 Newtonx

Hasta donde yo sé, no se pueden declarar fuentes personalizadas en xml o temas. Por lo general, solo creo clases personalizadas que extienden la vista de texto que configuran su propia fuente al crear instancias y las uso en mis archivos xml de diseño.

es decir:

public class Museo500TextView extends TextView {
    public Museo500TextView(Context context, AttributeSet attrs) {
        super(context, attrs);      
        this.setTypeface(Typeface.createFromAsset(context.getAssets(), "path/to/font.ttf"));
    }
}

y

<my.package.views.Museo900TextView
        android:id="@+id/dialog_error_text_header"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="12sp" />
trippedout avatar Oct 30 '2013 19:10 trippedout