如何在android APP中设置系统语言?

目前有采用下面方法,但是这样仅仅是改变了应用的语言,系统没有改变,我的需求是改变天下系统语言:

private void setLanguage(int language) {
        try {
            Configuration config = getResources().getConfiguration();
            DisplayMetrics dm = getResources().getDisplayMetrics();
            if (language == Common.LANGUAGE_EN) {
                config.locale = Locale.ENGLISH;
            } else {
                config.locale = Locale.SIMPLIFIED_CHINESE;
            }
            getResources().updateConfiguration(config, dm);

            SharedPreferences sp = getSharedPreferences("userinfo", 0);
            SharedPreferences.Editor editor=sp.edit();
            editor.putInt("locale", language);
            editor.commit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
阅读 13.2k
1 个回答

已找到一种方案并验证通过,通过反射机制,不过设置完了,重启后又恢复原语言了,追问该如何保存系统语言设置?

private void updateLanguage(Locale locale) {
        try {
            Object objIActMag, objActMagNative;
            Class clzIActMag = Class.forName("android.app.IActivityManager");
            Class clzActMagNative = Class.forName("android.app.ActivityManagerNative");
            Method mtdActMagNative$getDefault = clzActMagNative.getDeclaredMethod("getDefault");
            // IActivityManager iActMag = ActivityManagerNative.getDefault();
            objIActMag = mtdActMagNative$getDefault.invoke(clzActMagNative);
            // Configuration config = iActMag.getConfiguration();
            Method mtdIActMag$getConfiguration = clzIActMag.getDeclaredMethod("getConfiguration");
            Configuration config = (Configuration) mtdIActMag$getConfiguration.invoke(objIActMag);
            config.locale = locale;
            // iActMag.updateConfiguration(config);
            // 此处需要声明权限:android.permission.CHANGE_CONFIGURATION
            // 会重新调用 onCreate();
            Class[] clzParams = { Configuration.class };
            Method mtdIActMag$updateConfiguration = clzIActMag.getDeclaredMethod(
                    "updateConfiguration", clzParams);
            mtdIActMag$updateConfiguration.invoke(objIActMag, config);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题