天天看點

android多語言支援(Locale與Configuration)android多語言支援(Locale與Configuration)

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" />

頁面效果:

android多語言支援(Locale與Configuration)android多語言支援(Locale與Configuration)

此外還需要定義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>

運作效果:

android多語言支援(Locale與Configuration)android多語言支援(Locale與Configuration)

最後在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) {

           }

       });

    }

}

效果

android多語言支援(Locale與Configuration)android多語言支援(Locale與Configuration)

最後動态設定預設的語言環境。

           @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) {

           }

運作效果:

android多語言支援(Locale與Configuration)android多語言支援(Locale與Configuration)

繼續閱讀