最近、Android開発でフォントファミリを使用しているときに、偽の太字と斜体のテキストの問題に遭遇しました。
この記事では、この問題とその解決策について説明したいと思います。
フォントファミリーの作成
API 26以降、フォントをファミリに結合することが可能になりました。
フォントファミリは、スタイルと重みを持つフォントファイルのコレクションです。
各スタイルと重みを個別のリソースとして参照する代わりに、新しいフォントファミリをXMLリソースとして作成し、それを単一の要素として参照することができます。
このようにして、システムは使用しようとしているテキストスタイルに基づいて正しいフォントを選択できるようになります。
サンプルファイル:
<?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>この属性fontStyleは、フォントのスタイルを定義します-通常(normal)または斜体(italic)。
次に、fontWeight-は重み、つまりフォントの重みを設定します。
そしてもちろん、font与えられたために使用するフォントを設定しますfontWeightとfontStyle。
フォントの重み
この標準はWeb開発から来ました。値は100から900まで100刻みで設定されます。
次の表は、飽和の一般的な名前に対応しています。
| 値 | 一般名 |
|---|---|
| 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"/>