font - roboto android
Valores válidos para android: fontFamily y a qué se asignan? (3)
En la respuesta a esta pregunta, el usuario enumera los valores de android:fontFamily
y 12 variantes (ver más abajo). ¿De dónde vienen estos valores? La documentación para android:fontFamily
no incluye esta información en ningún lugar (verifiqué here y here ). Las cadenas se enumeran en el archivo styles.xml Android en varios lugares, pero ¿cómo se asignan de nuevo a la fuente Roboto?
Desde Android 4.1 / 4.2, las siguientes familias de fuentes Roboto están disponibles:
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"
12 variantes son posibles:
- Regular
- Itálico
- Negrita
- Negrita cursiva
- Ligero
- Luz-itálica
- Delgado
- Fino-cursiva
- Condensado regular
- Cursiva condensada
- Condensado en negrita
- Condensado negrita-cursiva
En el archivo styles.xml
en la aplicación, estoy trabajando en alguien que figura 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 de algunos de los estilos que se crearon antes de que viera el archivo.
¿De dónde vienen estos valores? La documentación para Android: fontFamily no incluye esta información en ningún lugar.
Estos de hecho no figuran en la documentación. Pero se mencionan here en la sección ''Familias de fuentes''. El documento enumera cada nueva API pública para Android Jelly Bean 4.1.
En el archivo styles.xml en la aplicación, estoy trabajando en alguien que figura como la familia de fuentes, y estoy bastante seguro de que está mal:
Sí, eso está mal. No hace referencia al archivo de fuente, tiene que usar el nombre de fuente mencionado en el documento vinculado arriba. En este caso debería haber sido esto:
<item name="android:fontFamily">sans-serif</item>
Al igual que la respuesta enlazada ya indicada, son posibles 12 variantes:
Añadido 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 y 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>
Luz-cursiva :
<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>
Fino-cursiva :
<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">italic</item>
Condensado regular :
<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>
Condensado en negrita :
<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold</item>
Condensado negrita-cursiva :
<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold|italic</item>
Añadido en Android Lollipop (v5.0) - API 21:
Medio
<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">normal</item>
Medio-cursiva :
<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 de Tipografía de diseño de materiales tiene demostraciones de algunas de estas fuentes y sugerencias para elegir fuentes y estilos.
Para códigos de código: android.googlesource.com/platform/frameworks/base/+/master/data/… es la lista definitiva y cada vez más amplia de fuentes de Android.
Usando estas fuentes
Establezca los 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 especificarlo directamente)
Nota: esta tabla se deriva de android.googlesource.com/platform/frameworks/base/+/master/data/… . El nombre 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, pues, la familia de fuentes, y normal
es el estilo.
Compatibilidad
En función del log de fonts.xml y el anterior system_fonts.xml , puede ver cuándo se agregó cada fuente:
- Sandwich de helado: Roboto regular, negrita, cursiva y negrita cursiva
- Jelly Bean: luz roboto, cursiva ligera, condensada, negrita condensada, cursiva condensada y negrita condensada
- Jelly Bean MR1: Roboto fino y fino en cursiva
- Pirulí:
- Roboto medio, medio cursiva, negro y negro cursiva
- Noto Serif regular, negrita, cursiva, negrita cursiva
- Cutive Mono
- Próximamente
- Dancing Script
- Carrois gótico SC
- Noto Sans
- Oreo MR1: medio condensado Roboto
Que yo sepa, no puede declarar fuentes personalizadas en xml o temas. Por lo general, solo hago clases personalizadas que amplían la vista de texto que establece su propia fuente en la creación de instancias y las utilizo en mis archivos de diseño XML.
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" />