这篇文章也提供了应用内部转换语言的方法: http://blog.csdn.net/sodino/article/details/6596709 。
1和2的方法是一样的,然而还是会调整了手机的语言设置
3对于大型应用来说显得有点儿笨重

针对于这两种程况,我也提供一种方法,即能在不改变手机设置的前提下,又能在大型项目上显得不会太笨重。直接上代码:

工具类:

import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.preference.PreferenceManager;
import android.util.DisplayMetrics;
import java.util.Locale; public class LanguageSettingUtil {
//单例模式-
private static LanguageSettingUtil instance;
private Context context;
//存储当前系统的language设置-
private String defaultLanguage;
//存储当前系统Locale-
private Locale defaultLocale;
public final static String ENGLISH = "en";
public final static String CHINESE = "zh"; private LanguageSettingUtil(Context paramContext) {
//得到系统语言-
Locale localLocale = Locale.getDefault();
this.defaultLocale = localLocale; //保存系统语言到defaultLanguage
String str = this.defaultLocale.getLanguage();
this.defaultLanguage = str; this.context = paramContext;
} //检验自身是否被创建-
public static LanguageSettingUtil get() {
if (instance == null)
throw new IllegalStateException(
"language setting not initialized yet");
return instance;
} //初始化-
public static void init(Context paramContext) {
if (instance == null) {
instance = new LanguageSettingUtil(paramContext);
}
} // 创建Configuration-
private Configuration getUpdatedLocaleConfig(String paramString) { Configuration localConfiguration = context.getResources()
.getConfiguration();
Locale localLocale = getLocale(paramString);
localConfiguration.locale = localLocale;
return localConfiguration;
} //得到APP配置文件目前的语言设置-
public String getLanguage() {
SharedPreferences localSharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this.context);
//如果当前程序没有设置language属性就返回系统语言,如果有,就返回以前的-
return localSharedPreferences.getString("language",
this.defaultLanguage);
} //如果配置文件中没有语言设置-
public Locale getLocale() {
String str = getLanguage();
return getLocale(str);
} //创建新Locale并覆盖原Locale-
public Locale getLocale(String paramString) {
Locale localLocale = new Locale(paramString);
Locale.setDefault(localLocale);
return localLocale;
} //刷新显示配置-
public void refreshLanguage() {
String str = getLanguage();
Resources localResources = this.context.getResources();
if (!localResources.getConfiguration().locale.getLanguage().equals(str)) {
Configuration localConfiguration = getUpdatedLocaleConfig(str);
// A structure describing general information about a display, such
// as its size, density, and font scaling.
DisplayMetrics localDisplayMetrics = localResources
.getDisplayMetrics();
localResources.updateConfiguration(localConfiguration,
localDisplayMetrics);
}
} //设置系统语言-
public void saveLanguage(String paramString) {
PreferenceManager.getDefaultSharedPreferences(this.context).edit()
.putString("language", paramString).commit();
} //保存系统的语言设置到SharedPreferences-
public void saveSystemLanguage() {
PreferenceManager.getDefaultSharedPreferences(this.context).edit()
.putString("PreSysLanguage", this.defaultLanguage).commit();
} public void checkSysChanged(String cuerSysLanguage) {
//如果系统语言设置发生变化-
if (!cuerSysLanguage.equals(PreferenceManager
.getDefaultSharedPreferences(this.context).getString(
"PreSysLanguage", "zh"))) {
//如果系统保存了this对象,就在这里修改defaultLanguage的值为当前系统语言cuerSysLanguage
this.defaultLanguage = cuerSysLanguage;
saveLanguage(cuerSysLanguage);
saveSystemLanguage();
}
}
}

调用类:

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.example.internationaltest.util.LanguageSettingUtil; public class MainActivity extends Activity { private LanguageSettingUtil languageSetting;
private TextView h,w;
private Button b;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); h = (TextView) findViewById(R.id.h);
w = (TextView) findViewById(R.id.w);
b = (Button) findViewById(R.id.b); LanguageSettingUtil.init(this);  // 初始化
languageSetting = LanguageSettingUtil.get();  // 检查是否已经初始化
} public void change(View view){
languageSetting.saveLanguage("en");  // 设置为"en"语言
LanguageSettingUtil.get().refreshLanguage();  // 刷新
h.setText(R.string.hello);
w.setText(R.string.world);
b.setText(R.string.change);
}
}

Android之应用内部实现国际化的更多相关文章

  1. Android 文件夹命名规范 国际化资源

    Android 文件夹命名规范 国际化资源 android多国语言文件夹文件汇总如下: 中文(中国):values-zh-rCN 中文(台湾):values-zh-rTW 中文(香港):values- ...

  2. 今天给大家分享一下Android中的资源与国际化的问题

    摘要:该文章将向大家分享Android中的资源与国际化的问题. 今天给大家分享一下Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layo ...

  3. Android SDCard和内部存储中gcc编译后的可执行文件无法运行提示 cannot execute - Permission denied

    原因是mount的方式问题,root后运行 su mount -o rw,remount /mnt/sdcard   //SDCard mount -o rw,remount /mnt/interna ...

  4. Android中的资源与国际化!

    Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layout与values目录,layout里的xml文件的我们应用使用布局的文件,val ...

  5. android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  6. eclipse中如何查看一个android模拟器的内部文件

    eclipse中如何查看一个android模拟器的内部文件,有时要在其中添加一个文件夹或是什么的,要手动的做这件事,而不能够用代码去完成时,就要用这个方法了. 1.首先,打开一个安卓模拟器. 2.这个 ...

  7. 彻底了解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  8. 彻底理解android中的内部存储与外部存储

    我们先来考虑这样一个问题: 打开手机设置,选择应用管理,选择任意一个App,然后你会看到两个按钮,一个是清除缓存,另一个是清除数据,那么当我们点击清除缓存的时候清除的是哪里的数据?当我们点击清除数据的 ...

  9. Android应用程序内部启动Activity过程(startActivity)的源代码分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6703247 上文介绍了Android应用程序的 ...

随机推荐

  1. 站点的安全防范都是后端的职责?非也,Web前端安全同样不可忽视

    前言 随着网络的快速普及,网络安全问题的受害者不再只是政府.企业等集体,每一个接触网络的普通人都有可能成为网络攻击的受害者.随着网络的普及,黑客进行网络攻击的手段越来也多,越来越复杂.以网站的攻击为例 ...

  2. 【LOJ】#2292. 「THUSC 2016」成绩单

    题解 神仙dp啊><(也有可能是我菜) 我们发现,想要拿一段区间的话,只和这个区间的最大值和最小值有关系,那么我们考虑,如果一个区间[l,r]我们拿走了一些数后,使它的最小值是a,最大值是 ...

  3. LoadRunner参数化时的中文乱码问题

    http://blog.sina.com.cn/s/blog_6cf205160100mdxi.html

  4. 8VC Venture Cup 2016 - Elimination Round F - Group Projects dp好题

    F - Group Projects 题目大意:给你n个物品, 每个物品有个权值ai, 把它们分成若干组, 总消耗为每组里的最大值减最小值之和. 问你一共有多少种分组方法. 思路:感觉刚看到的时候的想 ...

  5. lnmp 一键安装包

    系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要5GB以上硬盘剩余空间 需要128MB以上内存(如果为128MB的小内存VPS,Xe ...

  6. thinkphp每次跳转时都会显示笑脸的修改

    Success和error方法都有对应的模板,并且是可以设置的,默认的设置是两个方法对应的模板都是://默认错误跳转对应的模板文件'TMPL_ACTION_ERROR' => THINK_PAT ...

  7. gzez某蒟蒻lyy的博客

    在gz,想去sn幻想乡也行,现在高一并且是已经高二但仍然是机房最弱,没救了 愿诸位身体健康 水平不行,写出来的东西很sb,但还是会偶尔记录一下... 数学公式测试:$\binom n{n_1\cdot ...

  8. [HDU6196]happy happy happy

    题目大意: 有一个长度为n的数列,A和B两个人轮流从两端取数,B先取,A想使分数严格小于B且尽量接近B,问两人分数之差最小是多少. 思路: 折半搜索,先预处理出长度为part的最大差最小差,再预处理出 ...

  9. LNMP一键安装包如何重装Nginx

    LNMP一键安装包安装好后,相应的Mysql,Nginx及PHP都会安装配置完成. 由于某些特殊情况的需要,如何更换Nginx的版本呢? nginx升级脚本可以完成. 1. 手动编译方法:/usr/l ...

  10. UVALive 5971

    Problem J Permutation Counting Dexter considers a permutation of first N natural numbers good if it ...