¿Valores válidos para android:fontFamily y a qué se asignan?
En la respuesta a esta pregunta, el usuario enumera valores para android:fontFamily
y 12 variantes (ver más abajo). ¿De dónde vienen estos valores? La documentación de android:fontFamily
no 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.xml
archivo 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.
¿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:
Fuentes disponibles (a partir de Oreo)
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.xml
es la lista definitiva y en constante expansión de fuentes de Android.
Usando estas fuentes
Establezca los atributos android:fontFamily
y 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-monospace
es por tanto la familia tipográfica y normal
es 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
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" />