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

266

En la respuesta a esta pregunta, el usuario enumera los 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 (verifiqué aquí y aquí ). Las cadenas se enumeran en el archivo styles.xml de Android en varios lugares, pero ¿cómo se correlacionan con la fuente Roboto?

Desde 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
  • Negrita
  • Negrita cursiva
  • Ligero
  • Cursiva clara
  • Delgado
  • Cursiva fina
  • Regular condensado
  • Cursiva condensada
  • Negrita condensada
  • Negrita-cursiva condensada

En el styles.xmlarchivo de la aplicación, estoy trabajando en alguien que enumeró esto como la 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 (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
fuente

Respuestas:

346

¿De dónde vienen estos valores? La documentación para android: fontFamily no enumera 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 API públicas nuevas para Android Jelly Bean 4.1.

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

Si, 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 esto:

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

Al igual que la respuesta vinculada ya mencionada, 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>

Negrita :

<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>

Delgada-cursiva :

<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
fuente
2
Jaja: DI sabía sobre el sitio antes de eso, así que encontrarlo no fue difícil. Pero para referencia futura: prefiero usar la búsqueda en developer.android.com sobre la búsqueda de google, ya que puede limitar la búsqueda solo a las API, publicaciones de blog, notas de lanzamiento, etc.
Ahmad
8
Y si usted está interesado: Este es el lugar donde se definen los tipos de letra. Esta clase carga las fuentes y esta las maneja en facto.
Ahmad
1
@androiddeveloper hecho. Roboto black no se refiere al color de la fuente, pero es solo una versión "más audaz" de Roboto Bold. He agregado una imagen de referencia en la parte inferior.
Ahmad
1
@ Ahmad Gracias por aclarar esto. Aquí está tu +1 ... :)
desarrollador de Android
2
Además, hay un gran alias para usar con fontFamily android.googlesource.com/platform/frameworks/base/+/master/data/…
Pauland
110

Fuentes disponibles (a partir de Oreo)

Vista previa de todas las fuentes

La página de Tipografía de diseño de materiales tiene demostraciones de algunas de estas fuentes y sugerencias sobre cómo elegir fuentes y estilos.

Para detectores de código: fonts.xmles la lista definitiva y en constante expansión de las fuentes de Android.


Usando estas fuentes

Establecer 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 puede especificarla directamente)

Nota: esta tabla se deriva de fonts.xml. El apellido y el estilo de cada fuente se enumeran en fonts.xml, p. Ej.

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

serif-monospacees, por lo tanto, la familia de fuentes 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 light, light italic, condensed, condensed bold, condensed italic y condensed bold italic
  • Jelly Bean MR1: Roboto delgada y cursiva delgada
  • Chupete:
    • Roboto medio, cursiva media, negro y cursiva negra
    • Noto Serif regular, negrita, cursiva, negrita cursiva
    • Cutive Mono
    • Próximamente
    • Guión de baile
    • Carrois Gothic SC
    • Noto Sans
  • Oreo MR1: medio condensado Roboto
Newtonx
fuente
1
¿Cómo encontraste en el registro la versión de Android?
Desarrollador de Android
3
@androiddeveloper Estaba mirando las fechas en que se agregó cada línea. Para saber con precisión qué fuentes están disponibles en una versión en particular, mire system_fonts.xml para esa versión, por ejemplo, para Lollipop: android.googlesource.com/platform/frameworks/base/+/…
Newtonx
Mi única queja sobre esto es que no está alfabetizado: p ¡Pero aún así! ¡Esta debería ser la mejor respuesta! ¡Gracias!
T.Woody
9

Que yo sepa, no puede declarar fuentes personalizadas en xml o temas. Por lo general, solo hago clases personalizadas que extienden la vista de texto que establecen su propia fuente en la instanciación y las utilizo 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" />
disparado
fuente
1
Esto puede costarle mucha memoria en una vista de reciclador
Florescu Cătălin