一般这种需要在自己的APP里去切换系统语言的需求是比较少的,毕竟系统设置里有了,但是万一项目中碰到这种需求,可以按照如下代码去切换,本人亲测有效
public void setLan(Locale locale) {
//
Class amnClass = null;
try {
amnClass = Class.forName("android.app.ActivityManagerNative");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Object amn = null;
Configuration config = null;
// amn = ActivityManagerNative.getDefault();
Method methodGetDefault = null;
try {
methodGetDefault = amnClass.getMethod("getDefault");
methodGetDefault.setAccessible(true);
amn = methodGetDefault.invoke(amnClass);
Method methodGetConfiguration = null;
methodGetConfiguration = amnClass.getMethod("getConfiguration");
methodGetConfiguration.setAccessible(true);
config = (Configuration) methodGetConfiguration.invoke(amn);
}catch (Exception e1) {
e1.printStackTrace();
}
// config.userSetLocale = true;
Class configClass = config.getClass();
Field f = null;
try {
f = configClass.getField("userSetLocale");
f.setBoolean(config, true);
} catch (Exception e) {
e.printStackTrace();
}
Log.d("wzh", "mCurrentLanguage" + mCurrentLanguage);
// set the locale to the new value
config.locale = locale;
// amn.updateConfiguration(config);
Method methodUpdateConfiguration = null;
try {
methodUpdateConfiguration = amnClass.getMethod(
"updateConfiguration", Configuration.class);
methodUpdateConfiguration.setAccessible(true);
methodUpdateConfiguration.invoke(amn, config);
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
以上代码就是一个方法而已,需要切换成什么语言就传什么参数,例如:要切换成中文就调用setLan(Locale.SIMPLIFIED_CHINESE)即可,要切换成英文就调用setLan(Locale.ENGLISH)即可