En mi aplicación de Android tengo una actividad de preferencia que permite al usuario anular el idioma de la aplicación. Para lograr esto que llamo esta función en onResume de cada actividad() y luego se restablece la vista de contenido:Idioma de actualización de Android en la actividad de preferencia
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());
}
}
En toda actividad funciona perfectamente bien. En la actividad de preferencia, sin embargo, cuando el usuario cambia el idioma, no se actualiza de inmediato, porque no hay un método setContentView(). El usuario debe volver a la actividad anterior y comenzar de nuevo la actividad de preferencias para ver reflejado el cambio de idioma.
Probé la siguiente en un onPreferenceChange() oyente:
Actualización de la configuración, la eliminación y readding las preferencias:
checkOverrideSystemLanguage(this); // Remove all preferences and add them to update the language getPreferenceScreen().removeAll(); addPreferencesFromResource(R.xml.preferences);
Actualización de la configuración y llamando onCreate (null)
Finalizando y reiniciando la actividad
finish(); startActivity(new Intent(this, PreferencesActivity.class));
Gracias por su ayuda!
Puede usar un pequeño truco y llamar a getActionBar(). SetTitle ("su título") en algún método que llame al principio –