Android だけでは、このようなタスクには十分ではありません。Android でのフォントの読み込みとレンダリングは、C で記述された Skia で行われます。Skia は、フォント内に文字が見つからないかどうかを検出し、そのような文字 (文字列全体ではなく) を別のフォントにフォールバックします。Android では日本語、ヘブライ語、またはアラビア語のテキストがこのように表示されます。これらのスクリプトに太字がないのはまさにそのためです。(それらのフォントはフォールバックによって選択され、フォールバックは 1 つのフォント ファイルのみを選択します。)
残念ながら、このメカニズムは API で提供されていないため、同様のものを独自に構築する必要があります。複雑に見えますが、見た目より簡単です。あなたがしなければならないことは、次のとおりです。
- 各フォント ファイルで使用できる文字のリストを用意します。
- すべての文字列について、文字列の文字数が多いフォントを見つけます。
各フォントの文字一覧取得
Android アプリでオンザフライでこれを行う必要はありません。各フォントの文字のリストを用意して、これらのリストをアプリに入れることができます。これは、Android では利用できないツールを使用する方がはるかに簡単だからです。私なら、フォント アプリの Python スクリプトを使ってそれを行います (ほとんどの本格的なフォント ツールには素晴らしい Python スクリプト環境があります) が、これらのアプリは高価であり、本格的なタイプ デザイナー向けです。あなたは Android 開発者なので、Java と C++ のライブラリであるsfntlyを使用することをお勧めします。sfntly を使用すると、必要なこと (フォント ファイルで使用可能な Unicode 文字のリストを取得すること) を簡単に行うことができます。このサンプルは、CMap テーブル (文字からグリフへのマッピングを保持するテーブル) で動作するため、開始点として適しています。
ここで興味深いのは、snftly が Java であり、それを Android アプリに含めて、すべてを自動的に実行できる可能性があることです。snftly に慣れることから始めることをお勧めします。
フォントの選択
前の部分の後、すべてのフォントの Unicode 文字のリストが表示されます。これらのリストに基づいて、すべての文字列のほとんどの文字を提供するフォント ファイルを選択するのは簡単です。