我想以編程方式查找我的所有應用程序。對於這一點,我已經創建了所需的文件夾:以編程方式本地化我的所有應用程序
如果我改變我的設備的語言,該語言在我的應用程序更改。但我想選擇語言。
爲此,我創建了首選項活動。在本次活動結束後,我寫了這個代碼:
...
mPreferenceLeguage.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object value) {
leng = value.toString();
int lengIndex = Integer.parseInt(leng) - 1;
// Update leguage summary
mPreferenceLeguage.setDefaultValue(lengIndex);
mPreferenceLeguage.setSummary(mPreferenceLeguage.getEntries()[lengIndex]);
if(leng.equals("1")){
saveLocale("en");
} else if(leng.equals("2")){
saveLocale("eu");
} else{
saveLocale("es");
}
return true;
}
});
}
public void saveLocale(String lang) {
String langPref = "Language";
SharedPreferences prefs = getSharedPreferences("CommonPrefs",
Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putString(langPref, lang);
editor.commit();
}
而在MainActivity,下面的代碼:
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
loadLocale();
...
public void loadLocale() {
String langPref = "Language";
SharedPreferences prefs = getSharedPreferences("CommonPrefs",
Activity.MODE_PRIVATE);
String language = prefs.getString(langPref, "");
changeLang(language);
}
public void changeLang(String lang) {
if (lang.equalsIgnoreCase(""))
return;
myLocale = new Locale(lang);
Locale.setDefault(myLocale);
android.content.res.Configuration config = new android.content.res.Configuration();
config.locale = myLocale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
}
的語言改變了,但inmediately。重新啓動應用程序時,語言會發生變化。
我想這個chage將是中立的。對此,我試圖在SaveLocale()方法的末尾重新調用Preference活動中的MainActivity。
我能做些什麼來解決它?