一般这种需要在自己的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)即可