Chcę, aby mój język zmieniał się dynamicznie i próbuję użyć onConfigurationChanged, ale nie jest wywoływany. Mam funkcję MainActivity, która tworzy pasek akcji i viewpager. Reszta moich stron to Fragmenty. W mojej sekcji Ustawienia mam przycisk, aby przełączyć język na francuski.Ustawienia regionalne: onConfigurationChanged nie nazywane
langChange.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View vi) {
MainActivity main = (MainActivity)getActivity();
main.langChange();
}
});
Wtedy w moim główną działalność Mam
@Override
public void onConfigurationChanged(Configuration newConfig){
super.onConfigurationChanged(newConfig);
if (locale != null){
newConfig.locale = locale;
Locale.setDefault(locale);
getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
}
}
public void langChange(){
if(currentLanguage == FRENCH_LANGUAGE){
locale = new Locale("en");
Locale.setDefault(locale);
Configuration c = getBaseContext().getResources().getConfiguration();
c.locale = locale;
getBaseContext().getResources().updateConfiguration(c,getBaseContext().getResources().getDisplayMetrics());
currentLanguage = "English";
}
else if(currentLanguage == ENGLISH_LANGUAGE){
locale = new Locale("fr");
Locale.setDefault(locale);
Configuration c = getBaseContext().getResources().getConfiguration();
c.locale = locale;
getBaseContext().getResources().updateConfiguration(c,getBaseContext().getResources().getDisplayMetrics());
currentLanguage = "French";
}
actionBar.setSelectedNavigationItem(actionBar.getTabCount() - 1); //This just puts it back to the settings tab
}
onConfigurationChanged
nie jest wywoływana. W swoim manifeście mam:
<activity android:name="MainActivity" android:screenOrientation="portrait" android:configChanges="locale"></activity>
Próbowałem dodając jedną lub wszystkie z tych opcji orientation|keyboardHidden|screenSize
bez powodzenia.
Powodem tego wszystkiego jest to, że chcę zmienić tekst akcji i cały tekst po kliknięciu przycisku. Mam oddzielny plik napisów dla języka francuskiego.
Każda pomoc będzie świetna.
Skąd wiesz, że 'onConfigurationChanged' nie jest wywoływany? Masz sprawdzanie 'null' wokół kodu wewnątrz metody, co może być problemem. Spójrz na to pytanie: http://stackoverflow.com/questions/6457659/android-onconfigurationchanged-not-being-called – Darwind
Dodałem punkty przerwania przed i po instrukcji if również z 'Log.d'. Wiem, że to nie działa na tę metodę. Spojrzałem również na powyższe pytanie, a te odpowiedzi nie rozwiązują mojego problemu. – BigT