Evitar fuentes falsas en Android

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>


Opción para biblioteca de soporte
<?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 fontStyledetermina el estilo de la fuente: regular ( normal) o cursiva ( italic).

A su vez, fontWeightestablece el peso, también conocido como el peso de la fuente.

Y, por supuesto, fontestablecerá la fuente que se utilizará para el fontWeighty 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 :







, , . , - .





, 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"/>



All Articles