切换系统语言

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

猜你喜欢

转载自blog.csdn.net/wzh048503/article/details/79045861
今日推荐