我想支持使用简单的微调器和按钮更改应用程序中的区域设置。重启应用程序后,在调试中,我看到语言环境已经改变,
String st = getResources().getConfiguration().locale.getLanguage(); // st = fr_ca
但应用程序不使用替代资源。我的代码:
public void onClickButtonSubmit(View view) {
Spinner spinner = (Spinner)findViewById(R.id.spinnerLanguage);
int id = spinner.getSelectedItemPosition();
MyPreferences myPreferences = new MyPreferences(this);
switch (id) {
case 0:
TruckerUtil.setLocale("en_CA", this);
myPreferences.setValue("lang", "en_CA");
break;
case 1:
TruckerUtil.setLocale("en_US", this);
myPreferences.setValue("lang", "en_US");
break;
case 2:
TruckerUtil.setLocale("fr_CA", this);
myPreferences.setValue("lang", "fr_CA");
break;
}
}
TruckerUtil类中的方法:
public static void setLocale(String lang, Context context) {
Locale locale = new Locale(lang);
locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config, null);
}
MyPreferense类中的方法:
public void setValue(String key, String val) {
SharedPreferences.Editor editor = preferences.edit();
editor.putString(key, val);
editor.commit();
}
public String getLocale() {
if (preferences.contains("lang")) {
return preferences.getString("lang", null);
}
return null;
}
在应用程序启动时设置新的语言环境:
public class App extends Application {
@Override
public void onCreate() {
MyPreferences myPreferences = new MyPreferences(this);
if (myPreferences.getLocale() != null) {
TruckerUtil.setLocale(myPreferences.getLocale(), this);
}
//String st = getResources().getConfiguration().locale.getLanguage();
}
}
我的资源:
/res/values/
/res/values-en-rCA/
/res/values-en-rUS/
/res/values-fr-rCA/
有什么想法吗? 附:如果使用无区域特定区域设置(例如'uk'或'ru'),它可以正常工作。