6
在我的Android应用程序中,我有一个首选项活动,让用户重写应用程序的语言。要做到这一点我调用这个函数在每一个活动的的onResume(),然后重置内容视图:Android更新语言偏好活动
public static void checkOverrideSystemLanguage(Context context) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(context);
// Check if system's language setting needs to be overridden
boolean overrideSystemLanguage = prefs.getBoolean(context
.getString(R.string.pref_key_chkbx_override_system_language),
false);
if (overrideSystemLanguage) {
// Get language selection and possible languages
String localeString = prefs.getString(
context.getString(R.string.pref_key_list_languages), "");
List<String> possibleLanguages = Arrays.asList(context
.getResources().getStringArray(
R.array.pref_values_list_languages));
if (possibleLanguages.contains(localeString)) {
// Change language setting in configuration
Locale locale = new Locale(localeString);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
}
// Use default language
else {
overrideSystemLanguage = false;
}
}
// Use default language
if (!overrideSystemLanguage) {
context.getResources().updateConfiguration(
Resources.getSystem().getConfiguration(),
context.getResources().getDisplayMetrics());
}
}
在每次工作完全正常活动。但是,在首选项活动中,当用户更改语言时,它不会立即更新,因为没有setContentView()方法。用户必须回到以前的活动并再次启动首选项活动才能看到反映的语言更改。
我想在一个onPreferenceChange()听者以下:
更新配置,删除和readding偏好:
checkOverrideSystemLanguage(this); // Remove all preferences and add them to update the language getPreferenceScreen().removeAll(); addPreferencesFromResource(R.xml.preferences);
更新配置和调用的onCreate(空)
整理并重新开始活动
finish(); startActivity(new Intent(this, PreferencesActivity.class));
感谢您的帮助!
您可以使用一些小技巧,并在开始调用的某种方法中调用getActionBar()。setTitle(“您的标题”) –