一.Android多语言切换

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

1.project结构

注:主要看下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

【Android 多语言切换简单实例分享】的更多相关文章

  1. .net实现webservice简单实例分享

    原理:WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互.作用:主要用 ...

  2. Android学习–Android app 语言切换功能

    功能: app用户根据自己的语言喜好,设置app语言.语言设置只针对本app,并在下次启动应用时保留前一次启动设置. 更新语言: public static void changeAppLanguag ...

  3. android 连接网络的简单实例

    1.android有两种连接网络的类HttpURLConnect和HttpClient,但是HttpClient已逐渐被HttpURLConnect类代替所以就不提及. 2.实例 String add ...

  4. 【转】Android 语言切换过程分析

    最近在看一个bug,系统切换语言后,本来退到后台的音乐,会在通知栏上显示通知.为了解决这个bug,我学习了下android的语言切换流程,也参考了大量其他人的资料.(主要参考了http://blog. ...

  5. android 语言切换过程分析

    android 语言切换过程分析 2014-02-27 18:13 1207人阅读 评论(0) 收藏 举报 语言切换android语言切换android改变语言 最近在看一个bug,系统切换语言后,本 ...

  6. Android 应用内多语言切换

    最近公司的 App 里需要用到多语言切换,简单来说,就是如果用户没有选择语言选项时,App 默认跟随系统语言,如果用户在 App 内进行了语言设置,那么就使用用户设置的语言.当然,你会发现,App 的 ...

  7. android Jni NDK开发环境搭建及其简单实例的编写

    android  Jni  NDK开发环境搭建及其简单实例的编写 由于工作需要,需要采用开发想要的JNI,由于之前没有接触过安卓的开发,所以更加网上的帖子,学习了下.遇到了些问题,然后总结下学习过程中 ...

  8. Android app应用多语言切换功能实现

    最近在做一个多语言切换的功能,类似于微信的语言切换,搜了下资料基本上都是以下这种: 1. 实现的效果 和微信类似,在设置界面打开切换语言的界面,选择语言后重启 HomeActivity,语言切换完成, ...

  9. Android经典项目开发之天气APP实例分享

    原文:Android经典项目开发之天气APP实例分享 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mzc186/article/details/5 ...

随机推荐

  1. solr File Upload "Unsupported ContentType: application/vnd.ms-excel Not in: [application/xml, application/csv, application/json, text/json, text/csv, text/xml, application/javabin]",

    今天在用solr管理界面导入文件时报错:"Unsupported ContentType: application/vnd.ms-excel  Not in: [application/xm ...

  2. python抓取日本网站上iphone5的价格

    抓取日本网站上iphone5的价格,比国内便宜好多汇率换算是在中国银行的网站上取得 #-*- coding:utf-8 -*- import requests import time from bs4 ...

  3. css - margin-padding

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. Unity导出webPlayer并且部署到IIS

    http://blog.csdn.net/zooen2011/article/details/12884811 做好的Unity3D项目工程导出webPlayer类型,本地可以直接打开导出的html文 ...

  5. hdu 5105 Math Problem(数学)

    pid=5105" target="_blank" style="">题目链接:hdu 5105 Math Problem 题目大意:给定a.b ...

  6. 单用户模式下mount -o remount,rw / 有大用途

    我们的Linux系统在无法启动时候,通常需要进入单用户模式下进行修改一些配置文件,或调整一些参数方可.但是在进入单用户模式后,我们的/文件系统是只读模式,无法进行修改,那么这个时候我们就需要用到一条命 ...

  7. NPM的天坑: 解决ERR! code UNABLE_TO_VERIFY_LEAF_SIGNATURE

    各种下载失败,并不是镜像源的问题,哪怕切换淘宝源也无法下载.总之就像断网一般无法下载.无关网络. 解决方案: http://stackoverflow.com/questions/20747817/e ...

  8. Atitit.eclipse comment  template注释模板

    Atitit.eclipse comment  template注释模板 1. Code templet1 1.1. Settpath1 1.2. 设置存储1 1.3. 导出设置1 2. Java d ...

  9. CSS3 :nth-child()伪类选择器

    CSS3 :nth-child()伪类选择器 CSS3的强大,让人惊叹,人们在惊喜之余,又不得不为其艰难的道路感到可惜:好 的标准只有得到行业浏览器的良好支持才算得上“标准”.CSS3标 准已提出数年 ...

  10. Android JNI和NDK学习(02)--静态方式实现JNI(转)

    本文转自:http://www.cnblogs.com/skywang12345/archive/2013/05/23/3095013.html JNI包括两种实现方法:静态和动态.两种方法的区别如下 ...