android多语言支持(Locale与Configuration)

来源:互联网 发布:上海淘宝代运营 编辑:程序博客网 时间:2024/05/09 12:48

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

<?xmlversion="1.0"encoding="utf-8"?>

<resources>

 

    <stringname="hello">こんにちは</string>

      <stringname="multilanguage_spinner_prompt">言叶を選択し</string>

   <string-arrayname="multilanguage_item">

        <item>中文</item>

        <item>English</item>

        <item>日文</item>

    </string-array>

</resources>

values-ja/strings.xml

<?xmlversion="1.0"encoding="utf-8"?>

<resources>

 

    <stringname="hello">Hello</string>

    <stringname="multilanguage_spinner_prompt">Select the language</string>

 

    <string-arrayname="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 Spinnerspinner = null;

    private Stringitem[];

 

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

           }

      

运行效果:

 


 

0 0