android多語言支援(Locale與Configuration)
建立一個繼承Activity類的MultiLanguageActivity,并設定布局檔案為:multilanguage.xml。
首先添加一個TextView和一個Spinner,TextView用于顯示一個字元串--“你好”,Spinner用于在程式中動态選擇語言。
<TextView android:id="@+id/multilanguage_tv01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/hello" android:textSize="24sp" /> <Spinner android:id="@+id/multilanguage_spinner01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:entries="@array/multilanguage_item" android:prompt="@string/multilanguage_spinner_prompt" android:spinnerMode="dialog" /> |
頁面效果:
此外還需要定義3個支援國際語言的strings.xml(預設的,values-en,values-ja)
values-en/strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">こんにちは</string> <string name="multilanguage_spinner_prompt">言葉を選択し</string> <string-array name="multilanguage_item"> <item>中文</item> <item>English</item> <item>日文</item> </string-array> </resources> |
values-ja/strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello</string> <string name="multilanguage_spinner_prompt">Select the language</string> <string-array name="multilanguage_item"> <item>中文</item> <item>English</item> <item>日文</item> </string-array> </resources> |
運作效果:
最後在Activity程式中先得到預設的Spinner執行個體,然後設定Spinner的setOnItemSelectedListener(),而後覆寫裡面的2個方法。
package lyx.feng.simpletextdemo; ...... public class MultiLanguageActivity extends Activity { private Spinner spinner = null; private String item[]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.multilanguage); this.spinner = (Spinner) super .findViewById(R.id.multilanguage_spinner01); this.item = getResources().getStringArray(R.array.multilanguage_item); this.spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MultiLanguageActivity.this, item[position], Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); } } |
效果
最後動态設定預設的語言環境。
@Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MultiLanguageActivity.this, item[position], Toast.LENGTH_SHORT).show(); Resources res = getResources(); Configuration conf = res.getConfiguration(); switch (position) { case 0: conf.locale = Locale.CHINA; break; case 1: conf.locale = Locale.ENGLISH; break; case 2: conf.locale = Locale.JAPAN; break; } DisplayMetrics metrics = res.getDisplayMetrics(); res.updateConfiguration(conf, metrics); tv.setText(getString(R.string.hello)); } @Override public void onNothingSelected(AdapterView<?> parent) { } |
運作效果: