Este fragmento de código hace lo que necesita, lo he probado. Supongamos, por ejemplo, que desea que el usuario pueda cambiar de idioma a través de un menú de su actividad principal. Puede hacerlo a través de ahorro de una bandera lenguaje como una preferencia de usuario y comprobar que en "onCreate()" y en "onConfigurationChanged()" de la siguiente manera:
public class MainActivity extends Activity {
SharedPreferences mPrefs1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this);
String languageToLoad = mPrefs1.getString("languagePref", Locale.getDefault().getLanguage());
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.activity_main);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this);
String languageToLoad = mPrefs1.getString("languagePref", Locale.getDefault().getLanguage());
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,getBaseContext().getResources().getDisplayMetrics());
setContentView(R.layout.activity_main);
}
// Declaring the Menu options
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);
return true;
}
//handle menu item selection
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemId()) {
case R.id.menu_switch_language:
String languageToLoad = getResources().getString(R.string.switch_language);
mPrefs1 = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = mPrefs1.edit();
editor.putString("languagePref", languageToLoad);
editor.commit(); // Very important to save the preference
finish();
startActivity(getIntent());
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
I "reinicio" mi actividad con acabado() y startActivity() para forzar la recarga de la IU que usa la nueva configuración regional.El cambio de orientación siempre restablece mi configuración regional – WarrenFaith