Android应用更改系统语言

来源:互联网 发布:淘宝玩具古剑 编辑:程序博客网 时间:2024/05/16 14:20
/** * Update the language of the system */public void updateLanguage(Locale locale) {    try {        Object objIActMag, objActMagNative;        Class clzIActMag = Class.forName("android.app.IActivityManager");        Class clzActMagNative = Class                .forName("android.app.ActivityManagerNative");        //amn = ActivityManagerNative.getDefault();        Method mtdActMagNative$getDefault = clzActMagNative                .getDeclaredMethod("getDefault");        objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);        // objIActMag = amn.getConfiguration();        Method mtdIActMag$getConfiguration = clzIActMag                .getDeclaredMethod("getConfiguration");        Configuration config = (Configuration) mtdIActMag$getConfiguration                .invoke(objIActMag);        // set the locale to the new value        config.locale = locale;        //持久化  config.userSetLocale = true;        Class clzConfig = Class                .forName("android.content.res.Configuration");        java.lang.reflect.Field userSetLocale = clzConfig                .getField("userSetLocale");        userSetLocale.set(config, true);        // 此处需要声明权限:android.permission.CHANGE_CONFIGURATION        // 会重新调用 onCreate();        Class[] clzParams = {Configuration.class};        // objIActMag.updateConfiguration(config);        Method mtdIActMag$updateConfiguration = clzIActMag                .getDeclaredMethod("updateConfiguration", clzParams);        mtdIActMag$updateConfiguration.invoke(objIActMag, config);        BackupManager.dataChanged("com.android.providers.settings");    } catch (Exception e) {        e.printStackTrace();    }}
然后在调用的时候:
case R.id.pupop_chinese:    Log.d(TAG, "onClick: 中文");    updateLanguage(Locale.SIMPLIFIED_CHINESE);    break;case R.id.pupop_english:    Log.d(TAG, "onClick: 英文");    updateLanguage(Locale.ENGLISH);    break;

别忘记添加权限
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
这样就可以啦
原创粉丝点击