Change app language programmatically in Android

前端 未结 30 2974
面向向阳花
面向向阳花 2020-11-21 04:34

Is it possible to change the language of an app programmatically while still using Android resources?

If not, is it possible to request a resource in an specific lan

30条回答
  •  爱一瞬间的悲伤
    2020-11-21 05:29

    I was looking for a way to change the system language programmatically. While I fully understand that a normal application should never do that and instead either:

    • the user should be pointed(through an intent) to the system settings to change it manually
    • the application should handle its localization on its own just like described in the answer of Alex

    there was a need to really change the language of the system programmtically.

    This is undocumented API and thus should not be used for market/end-user applications!

    Anyway heres the solution i found:

      Locale locale = new Locale(targetLocaleAsString);
    
      Class amnClass = Class.forName("android.app.ActivityManagerNative");
      Object amn = null;
      Configuration config = null;
    
      // amn = ActivityManagerNative.getDefault();
      Method methodGetDefault = amnClass.getMethod("getDefault");
      methodGetDefault.setAccessible(true);
      amn = methodGetDefault.invoke(amnClass);
    
      // config = amn.getConfiguration();
      Method methodGetConfiguration = amnClass.getMethod("getConfiguration");
      methodGetConfiguration.setAccessible(true);
      config = (Configuration) methodGetConfiguration.invoke(amn);
    
      // config.userSetLocale = true;
      Class configClass = config.getClass();
      Field f = configClass.getField("userSetLocale");
      f.setBoolean(config, true);
    
      // set the locale to the new value
      config.locale = locale;
    
      // amn.updateConfiguration(config);
      Method methodUpdateConfiguration = amnClass.getMethod("updateConfiguration", Configuration.class);
      methodUpdateConfiguration.setAccessible(true);
      methodUpdateConfiguration.invoke(amn, config);
    

提交回复
热议问题