[英]Update ListPreference summary on language change
當在ListPreference
選擇一種新語言時,我將其更改並重新加載Fragment
以便應用它,例如:
listPreference.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
// Get selected language
String selectedLanguage = newValue.toString();
preference.setSummary(selectedLanguage);
// Change language
Locale locale;
if (selectedLanguage.equals("French")) {
locale = new Locale("fr");
} else {
locale = new Locale("en");
}
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getActivity().getApplicationContext().getResources().updateConfiguration(config, null);
// Refresh fragment
getFragmentManager().beginTransaction()
.replace(R.id.content_frame, new SettingsFragment())
.commit();
return true;
}
});
舉例來說,如果選擇了法語,它將確實對所有我的字符串應用法語(在strings-fr.xml
文件中定義),但對於ListPreference
的摘要卻不這樣做(即使它們在正確的文件)。
兩個問題:
有沒有更好的方法來加載我的語言而不是重新加載我的Fragment
?
以及如何將ListPreference
的摘要更新為正確的語言?
有沒有更好的方法來加載我的語言而不是重新加載我的片段?
我認為這是立即加載新語言的最佳方法。 但是,在“ Activity
/ Application
重新啟動后,它可能不會繼續。 在這種情況下,您需要從SharedPreferences
檢查語言並將其加載到Activity
/ Application
onCreate()
:
private Locale locale = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final Configuration config = getBaseContext().getResources().getConfiguration();
final String language = PreferenceManager.getDefaultSharedPreferences(this).getString("language", "");
if (!TextUtils.isEmpty(language) && !config.locale.getLanguage().equals(language))
{
locale = new Locale(language);
setLocale(config);
}
setContentView(R.layout.main_activity);
...
}
以及如何將我的ListPreferences摘要更新為正確的語言?
您的問題是缺少XML文件,但是這是我通常的工作方式,它每次都能正常工作,並且不需要以編程方式更新摘要:
preferences.xml
<ListPreference
android:defaultValue="en"
android:entries="@array/language_names"
android:entryValues="@array/language_values"
android:icon="@drawable/ic_language"
android:key="language"
android:summary="@string/current_language"
android:title="@string/language_title"/>
strings.xml
<string-array name="language_names">
<item>English</item>
<item>French</item>
</string-array>
<string-array name="language_values">
<item>en</item>
<item>fr</item>
</string-array>
<string name="current_language">English</string>
strings-fr.xml
<string-array name="language_names">
<item>Anglais</item>
<item>Français</item>
</string-array>
<string name="current_language">Français</string>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.