Saya baru-baru ini mengalami masalah teks tebal dan miring palsu saat menggunakan keluarga font dalam pengembangan Android.
Pada artikel ini saya ingin berbicara tentang masalah ini dan solusinya.
Membuat keluarga font
Dimulai dengan API 26, font dapat digabungkan menjadi beberapa keluarga.
Keluarga font adalah kumpulan file font dengan gaya dan beratnya.
Anda bisa membuat keluarga font baru sebagai sumber daya XML dan merujuknya sebagai satu elemen, alih-alih menyebut setiap gaya dan bobot sebagai sumber daya terpisah.
Dengan cara ini sistem akan dapat memilih font yang benar berdasarkan gaya teks yang Anda coba gunakan.
File contoh:
<?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>Atribut fontStylemenentukan gaya font - regular ( normal) atau italic ( italic).
Pada gilirannya, fontWeight- mengatur bobot, alias bobot font.
Dan tentu saja, itu fontakan mengatur font yang akan digunakan untuk yang diberikan fontWeightdan fontStyle.
Berat font
Standar ini berasal dari pengembangan web. Nilai ditetapkan dari 100 hingga 900 dengan kelipatan 100.
Tabel berikut sesuai dengan nama umum untuk saturasi:
| Nilai | Nama yang umum |
|---|---|
| 100 | Tipis (Berbulu) |
| 200 | Cahaya ekstra |
| 300 | Berwarna terang |
| 400 | Normal |
| 500 | Tengah |
| 600 | Mencolok |
| 700 | Berlemak |
| 800 | Sangat berani |
| 900 | Hitam (Tebal) |
, , — 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"/>