2011-09-21 18 views
24

PREAMBLE:API 17(Android 4.2)以降、TextView.setTextLocale()というメソッドがあり、TextViewsと派生クラスでこの問題が明示的に解決されています。日本語のロケール(Locale.JAPAN)を割り当て、Unihanの文字は日本語で表示されます。Androidで中国語のように見える日本語の文字


私は、WebViewsとTextViewsに日本語のテキストを表示するアプリケーションをAndroid上に持っています。慣習的には中国と日本で異なるが、同じUnicodeコードポイントを共有するいくつかの漢字(漢字)があります。通常、ブラウザはlangタグを使用して正しいグリフを選択します。 Androidでは、デフォルトですべて中国語の形になり、日本語の形が欲しい。

この問題は、this articleでよく説明されています。この記事は、Android(最大2.2)で視聴された場合、「言語に依存する文字の例」の文字がすべて同じように見え、中国語の場合の完全な例としても機能します。

lang="ja"属性を使用することは役に立ちません。システムロケール全体を日本語に切り替えることは役に立ちません。

私は日本で販売されているAndroidの携帯電話に不思議です。直、今のようなキャラクターは、それらの上にも中国風を見せますか?私はそうは思わない。

質問:Androidの公式ローカライズされた画像がありますか?エミュレータで実行することはできますか? DroidSansFallbackフォントはまだそれらのCJK対応フォントですか?それがあれば、それはバニラアメリカのAndroidと同じですか?

私は、日本のグリフがフォント(Unicodeのプライベートエリアなど)のどこかに隠されていることを望んでいます。もしそうなら、私はそれらを活用することができます...

EDIT:DroidSansJapanese.ttfに位置し、/ system/fontsにコピーしてエミュレータにインストールし、再起動します。 Unihanの記事の見た目には違いはありませんでした。日本語のテキスト入力のヒント領域(よく知っているはずです)は、中国語のように表示されます。

DroidSansJapanese.ttfの書体の名前はどのように知っていますか?私はまだDroid Sansだと感じています.DroidSansFallbackの内蔵フォントと同じです。しかし、同じ書体が含まれている場合、どちらが優先されるべきかを決定するのは何ですか?システムロケールは考えられますが、明らかにそうではありません。 Androidのフォントは、コピーするだけでインストールされます。

+1

FYIこれらの文字はあなたの投稿に中国風に見えます。 :) –

+0

あなたが投稿したそれらのキャラクターは中国語です...日本語の単語の中にも中国語の単語があります – xDragonZ

+0

私は日本にいるので問題はありません。私たち(会社)は銀河系のアメリカ版(?)を持っていて、日本語の文字を表示するのに問題はありません。私にwebviews上の問題をもたらすだろう ことの一つは、UTF-8 METAタグ設定されていません。 問題のあるページのリンクやサンプルを投稿できますか?どのデバイスに問題がありますか?あなたがもっと詳細な情報を与えるなら、私は答えようとすることができます。ここにあなたはアンドロイドは私が本当だとは思わない日本を表示することはできないと言っているだけです。 – DallaRosa

答えて

4

日本語が完全にサポートされているフォントがあります。 DroidSansJapanese.tffとTakaoPGothicについて話している人もいます。

4

多少気味悪い解決策を見つけました。

DroidSansJapanese.ttfフォントが存在し、ダウンロード可能です(例:here)。私はそれをダウンロードし、DroidSansJapanese.mp3に名前を変更して1MBの圧縮資産制限を避け、assets/webの下に置いた。私は、次のCSS文を導入:

@font-face 
{ 
font-family: "DroidJP"; 
src:url('DroidSansJapanese.mp3') 
} 

は、それから私は、すべての関連するCSSスタイルのfont-familyに「DroidJP」を追加しました。私のHTMLをロードする方法は、assets/webフォルダは、すでにリンクされたコンテンツを読み込むためのベースとして指定されています。

慎重に調べてみると、日本語がTextViewであるアプリ内のいくつかの場所が見つかりました。人のために、私はこのような書体をロードした:

Typeface s_JFont = 
    Typeface.createFromAsset(Ctxt.getAssets(), "web/DroidSansJapanese.mp3"); 

とすべての関連のTextViewにsetTypeface()と呼ばれます。今PROFITのために!

これは、APKを約1 MB拡張しました。私は資産を圧縮した形で保存するという方法がありました。それはAPKサイズの約500 KBを節約できましたが、最初の実行時に電話機メモリに展開する必要がありますデータフォルダのパスについては、アンドロイド1.5との互換性を失う。

一部のクレジットはhereおよびhereです。 Android 2.1(WebViewsではなくTextViews)で動作します - それはknown bugです。

ここで、デフォルトのフォントに既に日本語の図形が含まれているデバイスを特定するにはどうすればよいですか?

EDIT re:mp3ハック。私はチャンクされたソリューションを最初に実装しましたが、次に資産にフォントを使うことに決めました。チャンクのアプローチは、1逆さまた - 小さいAPKサイズ - と、次の欠点:

  • は、より多くの携帯電話のメモリを消費する - あなたが保存結局両方のデータディレクトリ
  • における資産および非圧縮で圧縮されたフォントは、Android 1.5と互換性がないですTextView側 - Typeface.createFromFile()は、APIレベルで導入された方法複雑HTML生成4
  • - @ font-face宣言とCSSデータパスが可変
  • あるので、parametrisedする必要が最初のアプリ遅く起動 - あなたはチャンクを結合する時間を費やす

フォントを圧縮された資産として保存することは、オプションではありません.WebViewにフォントが表示されず、「データがUNCOMPRESS_DATA_MAXを超えています」というメッセージがLogCatに明瞭に表示されます。

+0

私は.mp3ハックを理解していません。理論的には、Android Asset Packaging Toolはmp3ファイルを圧縮しない(またはあまりうまくいかない)。カーネルの '\ tools \ aapt'パッケージにある' Package.cpp' Androidソースファイルを開くと、ファイルの一番上にmp3がリストされた 'kNoCompressExt []'という名前のchar配列が見つかります。 –

+0

圧縮されたアセットを1 MB以上保存すると、AssetManager.open()を使用してアセットを開くとエラーが発生します。回避策は、[ここ](http://stackoverflow.com/questions/2860157/load-files-bigger-than-1m-from-assets-folder/3093966)に記載されています。 –

+0

正確に、その投稿の回答#2を読んでください。 mp3に名前を変更すると、すでに圧縮されているので、圧縮しないようにAAPTに指示します。 –

関連する問題