警告
我所阅读的所有内容都表明,让您的应用更改语言不是一个好主意,因为 Android 框架不支持它并且可能会导致问题。
话虽如此,我已经在我的应用程序中完成了它,虽然它有点痛苦,但它似乎到目前为止还有效。如果您想这样做,我就是这样做的。您需要为每种语言创建一个单独的 strings.xml 文件。 strings.xml 在 values 文件夹中作为您的默认值,然后可能在 strings.xml 中设置为西班牙语字符串的 values-es 文件夹。我使用以下代码根据用户选择的RadioButton 更改配置设置
final Configuration LANG_CONFIG = ChooseLocale.this.getResources().getConfiguration();
Locale newLocale = new Locale("English");
curLang = ChooseLocale.this.getLanguage();
if ((curLang.equals("English")) || (curLang.equalsIgnoreCase("Ingles")))
{
newLocale = new Locale("en_US");
}
else
{
newLocale = new Locale("es");
}
Toast.makeText(getApplicationContext(), newLangToast + " " + curLang , Toast.LENGTH_SHORT).show();
Configuration config = getBaseContext().getResources().getConfiguration();
Locale.setDefault(newLocale);
config.locale = newLocale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
SharedPreferences.Editor editor = langPref.edit();
editor.putString(LANG_PREF, curLang);
editor.commit();
这一行是最重要的更新配置
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
我从我的getLanguage() 函数中获取语言环境,可以根据需要进行处理。我还必须添加
@Override
public void onConfigurationChanged(Configuration newConfig) {
newConfig = Globals.getUserLanguage(this);
super.onConfigurationChanged(newConfig);
到每个允许改变方向的活动,并将其添加到我的onCreate() 中
final SharedPreferences langPref = getSharedPreferences (LANG_PREF, 0);
if (Globals.langConfig != null)
this.onConfigurationChanged(Globals.langConfig);
我还在清单中允许改变方向的每个活动中添加了android:configChanges="orientation|locale"
Android Docs on localization