Recientemente encontré el problema del texto falso en negrita y cursiva al usar la familia de fuentes en el desarrollo de Android.
En este artículo quiero hablar sobre este problema y su solución.
Crear una familia de fuentes
A partir de API 26, fue posible combinar fuentes en familias.
Una familia de fuentes es una colección de archivos de fuentes con su estilo y peso.
Puede crear una nueva familia de fuentes como recurso XML y referirse a ella como un elemento único, en lugar de referirse a cada estilo y peso como recursos separados.
De esta forma, el sistema podrá seleccionar la fuente correcta según el estilo del texto que está intentando utilizar.
Archivo de ejemplo:
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/lobster_regular" />
<font
android:fontStyle="italic"
android:fontWeight="400"
android:font="@font/lobster_italic" />
</font-family>
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
app:fontStyle="normal"
app:fontWeight="400"
app:font="@font/lobster_regular" />
<font
app:fontStyle="italic"
app:fontWeight="400"
app:font="@font/lobster_italic" />
</font-family>
El atributo fontStyle
determina el estilo de la fuente: regular ( normal
) o cursiva ( italic
).
A su vez, fontWeight
establece el peso, también conocido como el peso de la fuente.
Y, por supuesto, font
establecerá la fuente que se utilizará para el fontWeight
y fontStyle
.
Peso de fuente
Este estándar proviene del desarrollo web. El valor se establece entre 100 y 900 en incrementos de 100.
La siguiente tabla corresponde a los nombres comunes de saturación:
Valor | Nombre común |
---|---|
100 | () |
200 | |
300 | |
400 | |
500 | |
600 | |
700 | |
800 | |
900 | () |
, , — 400, — 700.
, Android , .
, .
, , . , - .
, lobster_two.xml
, , , :
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
app:fontStyle="normal"
app:fontWeight="400"
app:font="@font/lobster_two_normal" />
<font
app:fontStyle="italic"
app:fontWeight="400"
app:font="@font/lobster_two_italic" />
<font
app:fontStyle="normal"
app:fontWeight="700"
app:font="@font/lobster_two_bold" />
<font
app:fontStyle="italic"
app:fontWeight="700"
app:font="@font/lobster_two_bold_italic" />
</font-family>
, lobster_two_incomplete.xml
:
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
app:fontStyle="normal"
app:fontWeight="400"
app:font="@font/lobster_two_normal" />
</font-family>
.
lobster_two_incomplete.xml
, lobster_two.xml
, .
, , .
//
val typeFace = resources.getFont(R.font.lobster_two)
textView.setTypeface(typeFace, Typeface.BOLD)
//
textView.typeface = resources.getFont(R.font.lobster_two_bold)
//
val typeFace = resources.getFont(R.font.lobster_two_incomplete)
textView.setTypeface(typeFace, Typeface.BOLD)
//
val typeFace = resources.getFont(R.font.lobster_two_normal)
textView.setTypeface(typeFace, Typeface.BOLD)
xml
//
<TextView
...
android:fontFamily="@font/lobster_two"
android:textStyle="bold|italic"/>
//
<TextView
...
android:fontFamily="@font/lobster_two_bold_italic"/>
//
<TextView
...
android:fontFamily="@font/lobster_two_incomplete"
android:textStyle="bold|italic"/>
//
<TextView
...
android:fontFamily="@font/lobster_two"
android:textStyle="bold"/>
//
<TextView
...
android:fontFamily="@font/lobster_two_bold"/>
//
<TextView
...
android:fontFamily="@font/lobster_two_normal"
android:textStyle="bold"/>