3

私は、人々がチベット語や古いギリシャ語などのさまざまなエキゾチックな言語で文字列を表示するために使用する Android アプリを維持しています。Android デバイスにはフォントがほとんどないため、ユーザーは SD カードにフォント ファイルを保存でき、アプリはそれらを使用します。

質問:文字列が指定された場合、どのフォント ファイルが最も適切であるかを自動的に決定するにはどうすればよいですか?

ノート:

  • 各文字列は 1 つの言語です。
  • 文字列は WebView に表示されます。
  • カスタム フォントは機能します。唯一の問題は、使用するフォント ファイルを決定することです。
  • 単一のフォントの代わりに、その文字列に使用できるフォントのリストを提供できます。

好奇心旺盛な人のための不必要なコンテキスト: 私はこの機能を開発しようとしています: http://code.google.com/p/ankidroid/issues/detail?id=779


UPDATE : Mostafa のアイデアに基づいて、 Antisquareオープン ソース ライブラリを作成することになりました。
それは非常にgetSuitableFonts高速なメソッドを持っています。

4

1 に答える 1

4

Android だけでは、このようなタスクには十分ではありません。Android でのフォントの読み込みとレンダリングは、C で記述された Skia で行われます。Skia は、フォント内に文字が見つからないかどうかを検出し、そのような文字 (文字列全体ではなく) を別のフォントにフォールバックします。Android では日本語、ヘブライ語、またはアラビア語のテキストがこのように表示されます。これらのスクリプトに太字がないのはまさにそのためです。(それらのフォントはフォールバックによって選択され、フォールバックは 1 つのフォント ファイルのみを選択します。)

残念ながら、このメカニズムは API で提供されていないため、同様のものを独自に構築する必要があります。複雑に見えますが、見た目より簡単です。あなたがしなければならないことは、次のとおりです。

  1. 各フォント ファイルで使用できる文字のリストを用意します。
  2. すべての文字列について、文字列の文字数が多いフォントを見つけます。

各フォントの文字一覧取得

Android アプリでオンザフライでこれを行う必要はありません。各フォントの文字のリストを用意して、これらのリストをアプリに入れることができます。これは、Android では利用できないツールを使用する方がはるかに簡単だからです。私なら、フォント アプリの Python スクリプトを使ってそれを行います (ほとんどの本格的なフォント ツールには素晴らしい Python スクリプト環境があります) が、これらのアプリは高価であり、本格的なタイプ デザイナー向けです。あなたは Android 開発者なので、Java と C++ のライブラリであるsfntlyを使用することをお勧めします。sfntly を使用すると、必要なこと (フォント ファイルで使用可能な Unicode 文字のリストを取得すること) を簡単に行うことができます。このサンプルは、CMap テーブル (文字からグリフへのマッピングを保持するテーブル) で動作するため、開始点として適しています。

ここで興味深いのは、snftly が Java であり、それを Android アプリに含めて、すべてを自動的に実行できる可能性があることです。snftly に慣れることから始めることをお勧めします。

フォントの選択

前の部分の後、すべてのフォントの Unicode 文字のリストが表示されます。これらのリストに基づいて、すべての文字列のほとんどの文字を提供するフォント ファイルを選択するのは簡単です。

于 2012-03-12T11:46:40.217 に答える