Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

XML フォント

Android 8.0(API レベル 26)では、フォントをリソースとして使用できる、XML フォントという新しい機能が導入されています。font ファイルを res/font/ フォルダに追加すると、フォントをリソースとしてバンドルできます。このフォントは R ファイルにコンパイルされ、Android Studio で自動的に使用可能になります。フォント リソースにアクセスするには、新しいリソースタイプである font を利用します。たとえば、@font/myfont または R.font.myfont を使用して、フォント リソースにアクセスできます。

Android 4.1(API レベル 16)以降を搭載するデバイスで XML フォント機能を利用するには、サポート ライブラリ 26 を使用します。サポート ライブラリの使用については、サポート ライブラリの使用セクションをご覧ください。

フォントをリソースとして追加するには、Android Studio で次の手順を実施します。

  1. res フォルダを右クリックし、[New] > [Android resource directory] に移動します。

    [New Resource Directory] ウィンドウが表示されます。

  2. [Resource type] リストで [font] を選択し、[OK] をクリックします。

    : リソース ディレクトリの名前は font にする必要があります。

    font リソース ディレクトリの追加

    図 1. font リソース ディレクトリの追加

  3. フォント ファイルを font フォルダに追加します。

    下記のフォルダ構造により、R.font.dancing_scriptR.font.lobsterR.font.typo_graphica が生成されます。

    リソース ディレクトリへのフォント ファイルの追加

    図 2. リソース ディレクトリへのフォント ファイルの追加

  4. フォント ファイルをダブルクリックして、エディタでフォントをプレビューします。 フォント ファイルのプレビュー

    図 3. フォント ファイルのプレビュー

フォント ファミリーの作成

フォント ファミリーは、フォント ファイルに、フォントのスタイルとウェイトの詳細情報を加えたセットです。 Android では、スタイルとウェイトをそれぞれ個別のリソースとして参照するのではなく、新しいフォント ファミリーを XML リソースとして作成し、単一のユニットとしてアクセスすることができます。これにより、アプリで使用しようとしているテキスト スタイルに基づいて、システムは正しいフォントを選択できます。

フォント ファミリーを作成するには、Android Studio で次の手順を実施します。

  1. font フォルダを右クリックして、[New] > [Font resource file] に移動します。[New Resource File] ウィンドウが表示されます。
  2. ファイル名を入力して、[OK] をクリックします。新しいフォント リソース XML がエディタで開きます。
  3. 各フォント ファイル、スタイル、ウェイト属性を <font> 要素で囲みます。次の XML は、フォント関連の属性をフォント リソース 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 レイアウトでのフォントの使用

フォントを使用する際は、TextView オブジェクトまたはスタイルで、単一のフォント ファイルまたはフォント ファミリーのフォントを使用します。フォントを TextView またはスタイルに追加する場合は、fontFamily 属性を使用します。

注: フォント ファミリーを使用すると、必要に応じて TextView が自動的に切り替わり、そのファミリーのフォント ファイルが使用されます。

TextView へのフォントの追加

TextView のフォントを設定するには、次のいずれかを行います。

  • レイアウト XML ファイルの fontFamily 属性を、アクセスしたいフォント ファイルに設定します。
    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:fontFamily="@font/lobster"/>
    
  • [Properties] ウィンドウを開いて、TextView のフォントを設定します。
    1. ビューを選択して、[Properties] ウィンドウを開きます。

      注: [Properties] ウィンドウは、Design Editor が開いている場合のみ利用可能です。このウィンドウの下部で [Design] タブを選択します。

    2. [textAppearance] プロパティを展開し、[fontFamily] リストからフォントを選択します。
    3. Properties からのフォントの選択

      図 4. [Properties] ウィンドウからのフォントの選択

図 5 の右端のペインに示されている Android Studio レイアウト プレビューで、TextView のフォントセットをプレビューできます。

レイアウト プレビューでのフォントのプレビュー

図 5. レイアウト プレビューでのフォントのプレビュー

スタイルへのフォントの追加

styles.xml を開いて、fontFamily 属性を、アクセスしたいフォント ファイルに設定します。

  • <style name="customfontstyle" parent="@android:style/TextAppearance.Small">
        <item name="android:fontFamily">@font/lobster</item>
    </style>
    
  • フォントのプログラムでの使用

    プログラムでフォントを取得するには、getFont(int) メソッドを呼び出して、取得したいフォントのリソース識別子を指定します。このメソッドは、Typeface オブジェクトを返します。システムによってフォント情報から最適なスタイルが選択されますが、setTypeface(android.graphics.Typeface, int) メソッドを使用すると、特定のスタイルで書体を設定できます。

    注: TextView では、これはすでに実施されています。

    Kotlin

    val typeface = resources.getFont(R.font.myfont)
    textView.typeface = typeface
    

    Java

    Typeface typeface = getResources().getFont(R.font.myfont);
    textView.setTypeface(typeface);
    

    サポート ライブラリの使用

    サポート ライブラリ 26.0 は、Android 4.1(API レベル 16)以降を搭載するデバイスで XML フォント機能をサポートします。

    : サポート ライブラリを介して XML レイアウトでフォント ファミリーを宣言する場合は、フォントを確実に読み込むために app 名前空間を使用します。

    <?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/myfont-Regular"/>
        <font app:fontStyle="italic" app:fontWeight="400" app:font="@font/myfont-Italic" />
    </font-family>
    

    プログラムでフォントを取得するには、ResourceCompat.getFont(Context, int) メソッドを呼び出して、コンテキストのインスタンスとリソース識別子を指定します。

    Kotlin

    val typeface = ResourcesCompat.getFont(context, R.font.myfont)
    

    Java

    Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);