我已经制作了一个Android应用来更改语言。但是,当应用程序关闭并再次打开时,语言将恢复为默认语言。 当应用再次打开且语言是用户的最后选择时,我该怎么做?
感谢您的帮助,我真的很感激。
答案 0 :(得分:1)
您需要将用户选择的语言保存到共享首选项或任何其他持久存储中,在下一次启动应用程序时,检索先前选择的语言并将其应用于应用程序。
当用户更改语言时,应完成并重新启动以应用新的语言活动,否则您需要调用该活动的 recreate()方法。
将上述类复制到您的代码中。
在您的活动中,覆盖以下方法。
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(LocaleHelper.onAttach(base));
}
当用户更改语言时,例如单击按钮。使用以下代码保存语言。 zh_CN 是英语的语言(iso)代码。
@Override
public void onClick(View v) {
LocaleHelper.persist(context,"en");
recreate();
}
答案 1 :(得分:0)
默认情况下,每次重新启动应用程序时,应用程序的语言都会回退到设备区域设置。
为了使您的应用程序的语言与用户选择的首选项相同,您需要保留用户选择的语言。一种方法是将语言首选项存储在SharedPreference中。启动应用程序后,请优先检查该值以决定应使用哪种语言,然后相应地调整视图。
您可以执行以下操作
更改语言后,按以下方式存储值:
SharedPreferences.Editor编辑器= getSharedPreferences(“ MyPref”, MODE_PRIVATE).edit(); editor.putString(“ language”,“ en”); editor.commit();
在onCreate()
中检索值,如下所示:
SharedPreferences prefs = getSharedPreferences("MyPref", MODE_PRIVATE);
String selectedLanguage = prefs.getString("language", "<enter default locale of app>");
setLocale(selectedLanguage);
最终按如下所示设置语言环境:
无活动重启:
在清单中设置android:configChanges="locale"
按如下所示更改setLocale:
private void setLocale(String lang) {
Locale myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
getBaseContext().getResources().updateConfiguration(conf, getBaseContext().getResources().getDisplayMetrics());
invalidateOptionsMenu();
onConfigurationChanged(conf);//Add this line
}
重写onConfigurationChanged():
@Override
public void onConfigurationChanged(final Configuration newConfig) {
super.onConfigurationChanged(newConfig);
textView.setText(<your-text>);
//Any other UI text to change
}
或者,您可以在更改语言环境后呼叫recreate();
。
这将确保您的区域设置正确更改。