一.Android多语言切换

Android应用的开发不可能只针对某一个国家或者区域使用,各国间语言文化各不相同,因此一个优秀的APP必须支持多种语言,为了实现这个特性,Android给出了一个解决方式,在res目录下通过values+语言编码来实现多国语言的支持(中间采用连字符号-连接),例如:values-es代表英文,如果你决定了你的应用要支持多国语言,那么你就必须新建多种values-XXX的多语言支持文件,下面通过一个例子来看看基本的使用方式,先看下效果图:

1.工程结构

注:主要看下res/values-en/strings.xml代表英文字符串资源文件,res/values-zh/strings.xml代表中文.

  • res/values-en/strings.xml
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">SwitchLanguage</string>    <string name="hello_world">This is an instance of Android</string>    <string name="switch_language">Switch Language</string>    <string name="english">English</string>    <string name="chinese">Chinese</string>    <string name="jump">Jump to Next Activity</string>    <string name="change">The language of the page has changed, too.</string>    <string name="showtext">You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.</string></resources>
  • res/values-zh/strings.xml
<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">切换语言</string>    <string name="hello_world">这是一个Android实例</string>    <string name="switch_language">切换语言</string>    <string name="english">英语</string>    <string name="chinese">中文</string>    <string name="jump">跳转到另一个页面</string>    <string name="change">这个页面语言也发生了变化</string>    <string name="showtext">你不能改变你的过去,但你可以让你的未来变得更美好。一旦时间浪费了,生命就浪费了。</string></resources>

2.代码实现

  1. BaseActivity.java
public class BaseActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        // 初始化PreferenceUtil        PreferenceUtil.init(this);        // 根据上次的语言设置,重新设置语言        switchLanguage(PreferenceUtil.getString("language", "zh"));    }    /** * * <切换语言> * * @param language * @see [类、类#方法、类#成员] */    protected void switchLanguage(String language)    {        // 设置应用语言类型        Resources resources = getResources();        Configuration config = resources.getConfiguration();        DisplayMetrics dm = resources.getDisplayMetrics();        if (language.equals("en"))        {            config.locale = Locale.ENGLISH;        }        else        {            // 简体中文            config.locale = Locale.SIMPLIFIED_CHINESE;        }        resources.updateConfiguration(config, dm);        // 保存设置语言的类型        PreferenceUtil.commitString("language", language);    }}

2、 MainActivity.java

public class MainActivity extends BaseActivity implements OnClickListener{    private Dialog mDialog;    private TextView textShow;    private Button button;    private Button button2;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        TextView textView = (TextView) findViewById(R.id.text);        button = (Button) findViewById(R.id.btn);        button2 = (Button) findViewById(R.id.btn_2);        textShow = (TextView)findViewById(R.id.text_show);        textView.setText(R.string.hello_world);        button.setText(R.string.switch_language);        //监听切换语言按钮,弹出dialog选择语言        button.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                if (mDialog == null) {                    LayoutInflater inflater = getLayoutInflater();                    View layout = inflater.inflate(R.layout.dialog_select_lanuage,null);                    TextView english = (TextView) layout.findViewById(R.id.select_english);                    TextView chinese = (TextView) layout.findViewById(R.id.select_chinese);                    mDialog = new Dialog(MainActivity.this, R.style.Custom_Dialog_Theme);                    mDialog.setCanceledOnTouchOutside(false);                    english.setOnClickListener(MainActivity.this);                    chinese.setOnClickListener(MainActivity.this);                    mDialog.setContentView(layout);                }                mDialog.show();            }        });        button2.setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                Intent it = new Intent(MainActivity.this, SecondActivity.class);                startActivity(it);            }        });    }    @Override    public void onClick(View v) {        mDialog.dismiss();          switch (v.getId()) {            case R.id.select_english:                //切换为英文                switchLanguage("en");                break;            case R.id.select_chinese:                //切换为中文                switchLanguage("zh");                break;            default:                break;        }        //更新语言后,destroy当前页面,重新绘制        finish();        Intent it = new Intent(MainActivity.this, MainActivity.class);        startActivity(it);    }}
  • activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <TextView        android:id="@+id/text"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:text="@string/hello_world" />    <Button        android:id="@+id/btn"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/text"        android:layout_centerHorizontal="true"        android:layout_marginTop="15dp"        android:text="@string/switch_language" />    <Button        android:id="@+id/btn_2"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_below="@+id/btn"        android:layout_centerHorizontal="true"        android:layout_marginTop="15dp"        android:text="@string/jump" />    <TextView        android:id="@+id/text_show"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_centerInParent="true"        android:textSize="18sp"        android:text="@string/showtext" /></RelativeLayout>

3、 工具类PreferenceUtil.java

public class PreferenceUtil {    private static SharedPreferences mSharedPreferences = null;    private static Editor mEditor = null;    public static void init(Context context){        if (null == mSharedPreferences) {            mSharedPreferences = android.preference.PreferenceManager.getDefaultSharedPreferences(context) ;        }    }    public static void removeKey(String key){        mEditor = mSharedPreferences.edit();        mEditor.remove(key);        mEditor.commit();    }    public static void removeAll(){        mEditor = mSharedPreferences.edit();        mEditor.clear();        mEditor.commit();    }    public static void commitString(String key, String value){        mEditor = mSharedPreferences.edit();        mEditor.putString(key, value);        mEditor.commit();    }    public static String getString(String key, String faillValue){        return mSharedPreferences.getString(key, faillValue);    }    public static void commitInt(String key, int value){        mEditor = mSharedPreferences.edit();        mEditor.putInt(key, value);        mEditor.commit();    }    public static int getInt(String key, int failValue){        return mSharedPreferences.getInt(key, failValue);    }    public static void commitLong(String key, long value){        mEditor = mSharedPreferences.edit();        mEditor.putLong(key, value);        mEditor.commit();    }    public static long getLong(String key, long failValue) {        return mSharedPreferences.getLong(key, failValue);    }    public static void commitBoolean(String key, boolean value){        mEditor = mSharedPreferences.edit();        mEditor.putBoolean(key, value);        mEditor.commit();    }    public static Boolean getBoolean(String key, boolean failValue){        return mSharedPreferences.getBoolean(key, failValue);    }}

4、 SecondActivity.java是要跳转的Activity,比较简单,只有一个TextView用来显示文本,语言切换,文本语言也随之切换。

public class SecondActivity extends Activity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);    }}
  • activity_second.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:text="@string/change" /></RelativeLayout>

例子比较简单,关键代码都有注释,有问题欢迎留言讨论,共同学习。

参考文献:http://my.oschina.net/jack1900/blog/290694

更多相关文章

  1. Android应用开发入门五问
  2. Android多语言支持以及各国语言Values文件夹命名规则
  3. Android主题换肤 无缝切换
  4. Android(安卓)切换系统语言源码分析
  5. 浅谈android应用之编程语言
  6. Android入门前言(一)之------Android应用开发入门五问
  7. Android(安卓)轻松实现语音朗读
  8. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Fedora镜像
  9. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像

随机推荐

  1. android中Textview如何限制在一行显示且
  2. Android强制让某个控件获得焦点
  3. android Material
  4. Android(安卓)Bundle类(简单实例)
  5. INSTALL_FAILED_INSUFFICIENT_STORAGE 这
  6. 引用 Android的DTMF处理(ToneGenerator)
  7. 常用的小方法,避免忘记,在此记录一下
  8. Android(安卓)SystemProperty
  9. android 制作的精美闹钟
  10. Android上使用Chrome DevTools 远程调试W