Nella mia app Android ho un'attività di preferenza che consente all'utente di ignorare la lingua dell'app. Per raggiungere questo io chiamo questa funzione in onResume di ogni attività() e poi ripristinare la visualizzazione di contenuti:Lingua di aggiornamento Android nell'attività preferita
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());
}
}
In ogni attività che funziona perfettamente bene. Nell'attività di preferenza, tuttavia, quando l'utente cambia lingua, non viene aggiornato immediatamente, perché non esiste un metodo setContentView(). L'utente deve tornare all'attività precedente e riavviare l'attività di preferenze per vedere la modifica della lingua riflessa.
ho provato quanto segue in un'onPreferenceChange() ascoltatore:
Aggiornamento della configurazione, rimozione e readding preferenze:
checkOverrideSystemLanguage(this); // Remove all preferences and add them to update the language getPreferenceScreen().removeAll(); addPreferencesFromResource(R.xml.preferences);
Aggiornamento della configurazione e chiamando onCreate (Null)
Rifinitura e riavvio dell'attività
finish(); startActivity(new Intent(this, PreferencesActivity.class));
Grazie per il vostro aiuto!
È possibile utilizzare un piccolo trucco e chiamare getActionBar(). SetTitle ("il titolo") in un metodo che si chiama all'inizio –