安卓国际化,应用内切换语言

    xiaoxiao2021-03-25  91

    很多应用开发中,我们需要做多语言版本,安卓在这方面做的很好,下面就写一个简单的例子:

    一、项目目录结构

    这里对几个关键点进行说明下:

    drawable-hdpi 为我们默认的图片存放目录

    drawable-en-hdpi 为英文版本对应的图片存放目录,当然ldpi\mdpi\xhdpi 也一样,如果需要,分别按这样的规则创建目录即可。

    values 为默认的配置文件目录

    values-en 为英文版本的配置文件目录

    values 目录下的strings.xml 内容为:

    [html] view plain copy <?xml version="1.0" encoding="utf-8"?>  <resources>      <string name="app_name">语言切换</string>      <string name="content">大家好,我叫单红宇。</string>      <string name="content2">AAAAA</string>  </resources>  

    values-en 目录下的strings.xml 内容为:

    [html] view plain copy <?xml version="1.0" encoding="utf-8"?>  <resources>        <string name="app_name">Language Switch</string>      <string name="content">Hello everyone, My name is SHANHY.</string>    </resources>  

    我故意在第一个strings.xml中放了content2,在第二个英文的里面没有放,是为了要说明不同语言的配置文件内容是不需要一一对应的,我们只需要在需要多语言的配置放到按规则命名的文件夹下即可。

    drawable-en-hdpi 和 drawable-hdpi 下面放了2个名称相同,内容不同的图片,也是为了要说明,图片也只一样支持多语言的。

    下面为MainActivity 代码:

    [java] view plain copy package com.shanhy.example.spinner;    import java.util.Locale;    import android.app.Activity;  import android.content.res.Configuration;  import android.content.res.Resources;  import android.os.Bundle;  import android.util.DisplayMetrics;  import android.view.View;    public class MainActivity extends Activity {        @Override      public void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.main);      }        /**      * 英语      *       * @param v      * @author SHANHY      * @date 2015年8月28日      */      public void switchEnglish(View v) {          switchLanguage(Locale.ENGLISH);      }        /**      * 中文      *       * @param v      * @author SHANHY      * @date 2015年8月28日      */      public void switchChinese(View v) {          switchLanguage(Locale.CHINESE);      }        /**      * 切换语言      *       * @param locale      * @author SHANHY      * @date 2015年8月28日      */      private void switchLanguage(Locale locale) {          Resources res = getResources();          Configuration config = res.getConfiguration();          DisplayMetrics dm = res.getDisplayMetrics();          Locale currentLocal = config.locale;          config.locale = locale;          res.updateConfiguration(config, dm);            // 如果切换了语言          if (!currentLocal.equals(config.locale)) {              // 这里需要重新刷新当前页面中使用到的资源              onCreate(null);          }      }  }  

    main.xml 和 AndroidManifest.xml 和我们平常开发是一样的,没有任何特殊的地方。

    main.xml

    [html] view plain copy <?xml version="1.0" encoding="utf-8"?>  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:layout_width="fill_parent"      android:layout_height="fill_parent"      android:background="@android:color/white"      android:orientation="vertical" >        <Button          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:textColor="@android:color/black"          android:text="English" android:onClick="switchEnglish"/>        <Button          android:layout_width="wrap_content"          android:textColor="@android:color/black"          android:layout_height="wrap_content"          android:text="中文" android:onClick="switchChinese"/>        <TextView          android:id="@+id/SpinnerResult"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_gravity="center_horizontal"          android:gravity="center"          android:lineSpacingExtra="10dp"          android:text="@string/content"          android:textColor="@android:color/black"          android:textSize="10pt"          android:textStyle="bold" >      </TextView>                <TextView          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_gravity="center_horizontal"          android:gravity="center"          android:lineSpacingExtra="10dp"          android:text="@string/content2"          android:textColor="@android:color/black"          android:textSize="10pt"          android:textStyle="bold" >      </TextView>        <ImageView          android:id="@+id/img"          android:layout_width="wrap_content"          android:layout_height="wrap_content"          android:layout_gravity="center_horizontal"          android:background="@drawable/testimg" />    </LinearLayout> 
    转载请注明原文地址: https://ju.6miu.com/read-19469.html

    最新回复(0)