天天看点

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)

继续阅读