Android如何在运行时更改应用程序语言

Fir*_*naa 21 android runtime

我想让用户使用微调器(或任何方式)更改我的应用程序的语言.我尝试了很多方法,但他们改变了这个活动的语言而不是所有的活动,我想保存它,所以当用户重启应用程序时,他会找到最后选择的语言.

小智 38

您可以在微调器中以任何方式使用此代码

String languageToLoad  = "en"; // your language 
Locale locale = new Locale(languageToLoad);  
Locale.setDefault(locale); 
Configuration config = new Configuration(); 
config.locale = locale; 
getBaseContext().getResources().updateConfiguration(config,  
getBaseContext().getResources().getDisplayMetrics());
Run Code Online (Sandbox Code Playgroud)

那么你应该保存这样的语言

SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",languageToLoad );
editor.commit();  
Run Code Online (Sandbox Code Playgroud)

并在每个活动中使用相同的代码从SharedPreferences onCreate()加载languageToLoad


小智 7

这是一个老问题,但无论如何我都会回答:-) 您可以扩展 Application 类以将 Abol3z 的解决方案应用于每个活动。创建类:

public class MyApplication extends Application {

   @Override
   public void onCreate() {
       super.onCreate();
       SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
       String lang = preferences.getString("lang", "en");
       Locale locale = new Locale(lang);
       Locale.setDefault(locale);
       Configuration config = new Configuration();
       config.locale = locale;
       getBaseContext().getResources().updateConfiguration(config,
               getBaseContext().getResources().getDisplayMetrics());    
   }  
}
Run Code Online (Sandbox Code Playgroud)

并将 MyApplication 设置为清单中的应用程序类:

 <application
        android:name=".MyApplication"
        ...
 />
Run Code Online (Sandbox Code Playgroud)

您可以设置 lang 值(在您的微调器中):

SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
preferences.edit().putString("lang", "en").commit();
Run Code Online (Sandbox Code Playgroud)

  • 根据 [documentation](https://developer.android.com/reference/android/app/Application.html#onCreate()) 应用程序 onCreate() 仅在应用程序启动时调用。所以你并没有真正在运行时改变语言,而是在下一个应用程序启动时,对吧?编辑:重新阅读原始问题,毕竟你的方法解决了问题。 (2认同)

Rag*_*ood 5

使用SharedPreferences跟踪用户选择的语言,然后在onCreate()和onResume()方法中设置要使用该语言的活动.这样它会在应用程序重启等过程中持续存在.