Этот фрагмент кода делает то, что вам нужно, я проверял это. Предположим, в качестве примера вы хотите, чтобы пользователь мог переключать язык с помощью меню из вашего основного занятия. Это можно сделать, сохранив языковой флаг в качестве предпочтения пользователя и отметив его в onCreate () и onConfigurationChanged () следующим образом:
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);
}
}
}