0

私は今、これを何日も探していました。

私の会社のAndroidデバイス(弊社製)はAndroid 2.1を使用しています。顧客の 1 人のためにアラビア語をサポートする必要があります。サードパーティのソフトウェアを入手してアラビア語を正しく結合し、別のサードパーティからフォントを購入して 2.1 でアラビア語を表示することができました。

Android 2.1 には fonts.xml というファイルがあり、フォールバック フォントを含むフォントをいつ使用するかを指定します。

コード内のどのコンポーネントが fonts.xml ファイル (現在は /frameworks/base/data/fonts にあります) を読み取るかを知りたいので、このファイルを別の場所に変更し、新しいファイルを再構築することなく顧客ごとに動的に変更できます。毎回のシステムイメージ。

ありがとうございました!

アップデート:

fonts.xml を検索すると、sdk.atree に次の行が含まれていることがわかりました。

# fonts for layoutlib.
frameworks/base/data/fonts/fonts.xml                 platforms/${PLATFORM_NAME}/data/fonts/fonts.xml
frameworks/base/data/fonts/DroidSans.ttf             platforms/${PLATFORM_NAME}/data/fonts/DroidSans.ttf
frameworks/base/data/fonts/DroidSans-Bold.ttf        platforms/${PLATFORM_NAME}/data/fonts/DroidSans-Bold.ttf
frameworks/base/data/fonts/DroidSansMono.ttf         platforms/${PLATFORM_NAME}/data/fonts/DroidSansMono.ttf
frameworks/base/data/fonts/DroidSerif-Bold.ttf       platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Bold.ttf
frameworks/base/data/fonts/DroidSerif-BoldItalic.ttf platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-BoldItalic.ttf
frameworks/base/data/fonts/DroidSerif-Italic.ttf     platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Italic.ttf
frameworks/base/data/fonts/DroidSerif-Regular.ttf    platforms/${PLATFORM_NAME}/data/fonts/DroidSerif-Regular.ttf
frameworks/base/data/fonts/DroidSansFallback.ttf     platforms/${PLATFORM_NAME}/data/fonts/DroidSansFallback.ttf
frameworks/base/data/fonts/DroidSansJapanese.ttf     platforms/${PLATFORM_NAME}/data/fonts/DroidSansJapanese.ttf

ただし、ファイル fonts.xm と DroidSansJapanese.ttf が /system/fonts/ に表示されません。

システムが読み取れるように、アラビア語フォントの名前を DroidSansJapanese.ttf に変更することを仕事に提案しましたが、これは将来混乱を招くことは間違いありません。

また、変更した fonts.xml を /system/fonts に手動で配置して、デバイスを再起動しようとしましたが、うまくいきませんでした。

また、FontLoader.java は fonts.xml をロードしますが、Bridge.java によって渡されるパス全体を指定しません。Bridge.java にもフル パスが渡されます。使用される変数は String fontOsLocation です。両方のクラスでこのように名前が付けられているため、検索を行いましたが、ソース内の正確な場所を指定するものは見つかりませんでした:

public static FontLoader create(String fontOsLocation) {}

私の最後のオプションは、FontLoader を書き直してみることです。そのため、fontOsLocation に文字列が必要な場合でも、SD カードからハードコードされたパスを指定するだけです。しかし、これがシステムにどのような影響を与えるかはわかりません。ありがとうございました。

4

1 に答える 1

2

さて、私は1つの解決策を見つけました。この問題に遭遇した人のために、ここにそれが行きます:

external / skia / src / Ports/SkFontHost_android.cpp->どの.ttfファイルをどのスタイルに使用するかを指定

フォントファイルは次の場所に追加する必要があります。

フレームワーク/ベース/データ/フォント/->ここにすべての.ttfファイルがあります

また、frameworks / base / data / fonts /フォルダー内のAndroid.mkも変更して、新しいフォントファイルがこのフォルダーから/ system/fontsにコピーされるようにする必要があります。

これが誰かを助けることを願っています。

于 2012-06-07T17:42:34.457 に答える