我希望应用程序的语言能够根据用户的偏好设置进行设置,但到目前为止它并不像我想要的那样工作。
我已经设置了默认值:strings.xml和values-es,其中包含一个西班牙语的strings.xml。我有一个菜单选项,可以将用户带到首选项活动页面,在那里他可以选择语言等其他内容。
因此,以下是一些代码片段:
当我更改语言时它可以工作,但是当我稍后回来或重新启动模拟器时,语言会回到默认的位置en_US,并且应用程序语言又被改回默认值。我该怎么解决这个问题?
我知道我可以获得此首选项(我可以从所有活动中访问它),然后每次设置区域设置,但我觉得有点麻烦,难道没有更加优雅的方法吗?
我想要做的是,如果用户设置了语言,则当他两天后回来时,无需再次更改语言。
有什么想法?
我已经设置了默认值:strings.xml和values-es,其中包含一个西班牙语的strings.xml。我有一个菜单选项,可以将用户带到首选项活动页面,在那里他可以选择语言等其他内容。
因此,以下是一些代码片段:
public class Preference extends PreferenceActivity implements
OnSharedPreferenceChangeListener {
......
// Set up a listener whenever a key changes
getPreferenceScreen().getSharedPreferences()
.registerOnSharedPreferenceChangeListener(this);
...}
//(......)
//and here I have the listener so when the language pref changes value the locale gets changed.
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.equals("listPref2")) {
String idioma = sharedPreferences.getString("listPref2", "catala");
if ("castella".equals(idioma)) {
idioma = "es_ES";
Locale locale = new Locale(idioma);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplicationContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
}
当我更改语言时它可以工作,但是当我稍后回来或重新启动模拟器时,语言会回到默认的位置en_US,并且应用程序语言又被改回默认值。我该怎么解决这个问题?
我知道我可以获得此首选项(我可以从所有活动中访问它),然后每次设置区域设置,但我觉得有点麻烦,难道没有更加优雅的方法吗?
我想要做的是,如果用户设置了语言,则当他两天后回来时,无需再次更改语言。
有什么想法?