分析:网上的资料很多都是基于小型的app进行的语言切换,如果项目够大,语言切换需要更近一步的改进

需求:在app中的某个Activity(比如app必备的“设置”页面)中点击需要切换的语言后,该app中的所有Activity都即切换为该语言;

实例假设:在app中只有一个Activity,点击”语言切换“按钮选择指定的语言即可将该Activity的切换为指定的语言

思路:点击”语言切换“按钮之后,改变该Activity的语言,然后通过向BroadcastReceiver发送重启本Activity的Intent,从而使重启后的Activity显示指定的语言。

具体做法和源代码见:http://www.eoeandroid.com/thread-187562-1-1.html【转载】


下面为本人自己总结的关键思路和做法:

第一步:

在项目的res目录下新建3个目录, values-en  values-zh-rCN values-zh-rTW(三个文件夹分别存放英语、简体中文、繁体中文), 将values文件中的string.xml复制到这3个文件夹下,并翻译里面的内容为该文件夹指定的语言。

例如:values文件中的string.xml 中的存在 <string name="主页">home</string>

则在values-en文件中的string.xml中将该语句改为<string name="home">home</string>

第二步:

在主Activity中写一个方法

public void switchLanguage(Locale locale) {
		Resources resources = getResources();// 获得res资源对象
        	Configuration config = resources.getConfiguration();// 获得设置对象
        	DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
        	config.locale = locale; // 要转换的语言
        	resources.updateConfiguration(config, dm);
    	}



必须在onCreate方法中条用switchLanguage方法
还得注意的是:在AndroidManifest.xml中要配置一下
在所有能进行语言切换的activity的节点中加上这个属性: android:configChanges="locale"
网上有资料说还要添加权限: <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
但经过测试,不添加该权限也能实现语言切换;
第三步:
通过向BroadcastReceiver发送重启本Activity的Intent,从而使重启后的Activity显示指定的语言。


总结分析:
上面的做法,在手机重启之后就会还原为默认的语言
解决思路:将要切换的语言保存到文件中,每次读取文件中的内容切换语言;可参考下面的做法。

如果上面做法的不满足你的需求,或者想更深入探究,欢迎继续浏览

实例假设:
现在有一个app,其中有Activity A、B、C、D,其中A为主Activity,D为包含“语言切换”按钮的Activity,进入该app之后首先进入A,然后操作打开B,再打开C,再在D中点击“语言设置“选择指定的语言进行切换,此时,该app中的所有Activity应该都切换为指定的语言。

思路:
首先新建SharedPreferences用来保存本app应该使用的语言,每次启动app时,本例中会首先启动Activity A,所以在A中onCreate方法中读取SharedPreferences的中的所指定的语言,那么后续的B、C、D也将会使用指定的语言,如果在D中切换了语言,则将要切换的语言保存在SharedPreferences中,并退出所有的Activity,然后通过向BroadcastReceiver发送重启本Activity的Intent,从而使重启后的app显示指定的语言。
启动了多个Activity,如何一次性所有Activity退出的方法可以参考下面的博文