Androidで偽のフォントを避ける

最近、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与えられたために使用するフォントを設定しますfontWeightfontStyle



フォントの重み



この標準はWeb開発から来ました。値は100から900まで100刻みで設定されます。



次の表は、飽和の一般的な名前に対応しています。



一般名
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