2016-08-25 19 views
0

私はアンドロイドが初めてです。そして、私は2つの言語の英語とウルドゥー語になるアプリケーションを実装しています。基本的にアラビア語にはテキストがあり、その意味はユーザーが選択した言語に基づいて英語またはウルドゥー語になります。Androidフォントが1つの画面に1つ以上表示されます

アラビア語のフォントを変更したいのですが、アプリケーション全体でフォントを適用すると、ウルドゥー語と英語の外観も変わります。だからTypeFaceを使ってアラビア語のフォントを含む各テキストビューにフォントを適用するだけでいいですか、これを実現するにはもっと良い方法がありますか?

また、カスタムフォントを削除して、デフォルトのフォントを再度コードに戻す方法を知りたいと思います。申し訳ありませんが、この質問が幼稚な場合、私はちょうどこれを行う可能性があるか知りたいです。あなたが英語 と(デフォルトの文字列に加えて)アラビア語の文字列の両方をサポートするためのアプリケーション、 をしたい場合は、単純に(英語のstrings.xml用)/res/values-enと呼ばれる2つの追加 リソースディレクトリを作成し、 ができ、例えば

答えて

1

/res/values-ar(アラビア語のstrings.xmlの場合)

strings.xmlファイル内では、 のリソース名は同じです。また

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string name="hello">مرحبا في اللغة الإنجليزية</string> 
</resources> 

:/res/values-ar/strings.xmlファイルは次のようになり、一方で

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string name="hello">Hello in English!</string> 
</resources> 

例えば、/res/values-en/strings.xmlファイルが このようになります。 、/res/values-ur_IN/strings.xmlファイルはurduの場合は次のようになります。

インド向けur_INパキスタンのur_PK

文字列を表示/ resを/レイアウトディレクトリのデフォルトのレイアウトファイルは、文字列リソースがどの言語やディレクトリ に関係なく、変数名@文字列/ハローによって 文字列を指し
<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<string name="hello">انگریزی میں خوش!!</string> 
</resources> 

Androidオペレーティングシステムは、文字列(フランス語、英語、またはデフォルト)は次のようになります文字列を表示するのTextViewコントロール でruntime.Aレイアウト時にロードする のバージョンを決定します。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<TextView 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:text="@string/hello" > 
</LinearLayout> 

文字列は、通常の方法でプログラム的にアクセスされます:

変更については
String str = getString(R.string.hello); 

あなたがその変更LANGを好きに必要な言語が..

btn_english.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Locale locale = new Locale("en"); 
        Locale.setDefault(locale); 
        Configuration config = new Configuration(); 
        config.locale = locale; 
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
        Toast.makeText(this, getResources().getString(R.string.lbl_langSelectEnglis), Toast.LENGTH_SHORT).show(); 

      } 
     }); 



btn_arbice.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Locale locale = new Locale("ar"); 
        Locale.setDefault(locale); 
        Configuration config = new Configuration(); 
        config.locale = locale; 
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
        Toast.makeText(this, getResources().getString(R.string.lbl_langSelecURdu), Toast.LENGTH_SHORT).show(); 

      } 
     }); 


btn_urdu.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       Locale locale = new Locale("ur_IN"); 
        Locale.setDefault(locale); 
        Configuration config = new Configuration(); 
        config.locale = locale; 
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
        Toast.makeText(HomeActivity.this, getResources().getString(R.string.lbl_langSelectEnglis), Toast.LENGTH_SHORT).show(); 

      } 
     }); 

はまた、単一の画面でこの例を参照してください

Custom fonts for TextView based on languages inside String

文字列の段落= "ちょっと変わったよ"; int NO_FLAG = 0;Bidi bidi =新しいBidi(段落、NO_FLAG); int runCount = bidi。getRunCount();(int i = 0; i < runCount; i ++){ String ltrtl = bidi.getRunLevel(i)%2 == 0? "ltr": "rtl"; 文字列subString = paragraph.substring(bidi.getRunStart(i)、bidi.getRunLimit(i)); Log.d( ">> bidi:" + i、subString + "は" + ltrtl)です。 }

プリント:

ねえどうしたのです

ضعيفはだから今1は、簡単にこのような言語の方向に基づいてTypefaceSpanまたはMetricAffectingSpanを構築することができ、RTL

あるLTRです:

SpannableString spanString = new SpannableString(paragraph); 
for (int i = 0; i < runCount; i++) { 
    Object span = bidi.getRunLevel(i) % 2 == 0 ? ltrFontSpan : rtlFontSpan; 
    spanString.setSpan(span, bidi.getRunStart(i), bidi.getRunLimit(i), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
} 
textView.setText(spanString); 
関連する問題