一.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. 在Docker中从头部署自己的Spark集群

    由于自己的电脑配置普普通通,在VM虚拟机中搭建的集群规模也就是6个节点左右,再多就会卡的不行 碰巧接触了Docker这种轻量级的容器虚拟化技术,理论上在普通PC机上搭建的集群规模可以达到很高(具体能有 ...

  2. MongoDB集群设置集合分片生效及查看集合分片情况

    #连接mongos /opt/mongodb/mongodb-linux-x86_64-2.4.8/bin/mongo  127.0.0.1:27017   #使用admin数据库 use admin ...

  3. Sublime Theme

    Package Control Messages======================== Theme - Spacegray----------------- Thanks for insta ...

  4. 详解Python中的迭代器和使用

    对于一个列表,a = [1, 2, 3, 4],我们最常见的遍历方式就是: a = [1, 2, 3, 4] for item in a: print item 这里我们研究一种新的方式,就是迭代器. ...

  5. GCC与G++那些事儿

    StackOverflow上一个很有名的问题,gcc和g++到底有什么区别? 答案如下: GCC: GNU Compiler Collection 指的是GNU编译器所支持的所有不同的类型的语言 gc ...

  6. JAVA 的IO操作实例

    实例要求: 1,加法操作: 键盘输入两个数字,完成加法操作.因为从键盘接收过来的内容都是通过字符串形式存放的,所以此时直接通过包装类 Integer将字符串变为基本数据类型. 2,菜单显示: 采用的知 ...

  7. Hybird App(一)----第一次接触

    App你知道多少 一 什么是Native App 长处 缺点 二 什么是Web App 长处 缺点 三 什么是Hybrid App 长处 缺点 四 Web AppHybrid AppNative Ap ...

  8. lua与c++ 中布尔布bool值对应关系

    lua代码返回值为真c++ lua_toboolean 返回一个 int  lua true = 1 false = 0 c++给lua返回 lua_pushboolean 1 = true 0 = ...

  9. 转:ios应用崩溃日志揭秘

    http://www.raywenderlich.com/zh-hans/30818/ios应用崩溃日志揭秘

  10. Atitit.文件搜索工具 attilax 总结

    Atitit.文件搜索工具 attilax 总结 1. 指定目录按照体积大小精确搜索1 1.1. File Seeker 4.5 版本的可以,3.5版本的不行..1 2. 按照文件内容搜索1 2.1. ...