Recentemente, encontrei o problema de texto falso em negrito e itálico ao usar a família de fontes no desenvolvimento do Android.
Neste artigo, quero falar sobre esse problema e sua solução.
Criação de uma família de fontes
A partir da API 26, tornou-se possível combinar fontes em famílias.
Uma família de fontes é uma coleção de arquivos de fontes com seu estilo e peso.
Você pode criar uma nova família de fontes como um recurso XML e se referir a ela como um único elemento, em vez de se referir a cada estilo e peso como recursos separados.
Desta forma, o sistema será capaz de selecionar a fonte correta com base no estilo de texto que você está tentando usar.
Arquivo de exemplo:
<?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>O atributo fontStyledetermina o estilo da fonte - regular ( normal) ou itálico ( italic).
Por sua vez, fontWeight- define o peso, também conhecido como o peso da fonte.
E, claro, ele fontdefinirá a fonte que será usada para o dado fontWeighte fontStyle.
Espessura da fonte
Este padrão veio do desenvolvimento web. O valor é definido de 100 a 900 em incrementos de 100.
A tabela a seguir corresponde aos nomes comuns para saturação:
| Valor | Nome comum |
|---|---|
| 100 | Fino (peludo) |
| 200 | Luz extra |
| 300 | Cor clara |
| 400 | Normal |
| 500 | Meio |
| 600 | Negrito |
| 700 | Gordinho |
| 800 | Extra negrito |
| 900 | Preto (grosso) |
, , — 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"/>