Я пытаюсь реализовать переключение языка приложения во время выполнения, как только пользователь изменил язык в настройках приложения. У меня есть этот код в моем PreferenceFragment:
public class Fragment_Preferences extends PreferenceFragment {
private SharedPreferences.OnSharedPreferenceChangeListener prefListener;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
prefListener = new SharedPreferences.OnSharedPreferenceChangeListener() {
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
Log.i("Pref changed", "Settings key changed: " + key);
if(key.equals("language_preference"))
{
String system_language = Locale.getDefault().getLanguage().toUpperCase();
String preference_language = Common_Methods.get_preference_language(getActivity());
Toast.makeText(getActivity(), "Pref changed: "+preference_language, Toast.LENGTH_SHORT).show();
Common_Methods.set_app_interface_language(getActivity(), system_language, preference_language);
}
}
};
prefs.registerOnSharedPreferenceChangeListener(prefListener);
}
}
Это мой метод set_app_interface_language
в классе Common_Methods
:
public static void set_app_interface_language(Context context, String system_language, String preference_language)
{
if(!preference_language.equals(system_language))
{
Locale locale = new Locale(preference_language.toLowerCase());
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
}
}
Я получаю всплывающее сообщение, когда меняю язык в настройках. Я знаю, что этот метод работает, так как я вызываю его также из моего Fragment_Main. Но язык не меняется во время выполнения - мне нужно выйти из приложения и снова открыть его, только тогда я вижу изменения.
Итак, как я могу изменить язык приложения во время выполнения, не перезапуская приложение? Спасибо!
OnSharedPreferenceChangeListener
, но ничего не происходит, все тот же язык... - person Igal   schedule 12.07.2014set_app_interface_language
returnconfig
и внутри своегоFragment_Preferences
я создал методonConfigurationChange
и вызвал его изOnSharedPreferenceChangeListener
. Это изменило язык моего меню «Параметры», но не всего приложения. Также, когда я добавилconfigChange="locale"
в файл manifest. Итак, что мне нужно сделать, чтобы изменить язык всего приложения? - person Igal   schedule 13.07.2014