Chcę pozwolić użytkownikowi zmienić język mojej aplikacji za pomocą pokrętła (lub w jakikolwiek sposób). Próbowałem na wiele sposobów, ale one zmieniają język tego działania, a nie wszystkie działania i chcę je zapisać, aby po ponownym uruchomieniu aplikacji użytkownik znalazł ostatnio wybrany język.Android, jak zmienić język aplikacji w czasie wykonywania
Odpowiedz
można użyć tego kodu w pokrętła lub dowolny sposób
String languageToLoad = "en"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
następnie należy zapisać się języka jak ten
SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",languageToLoad);
editor.commit();
i użytkowania ten sam kod w każdej czynności w onCreate()
, aby załadować z SharedPreferences
Użyj SharedPreferences, aby śledzić język wybrany przez użytkownika, a następnie ustaw działania, aby używać tego języka w metodzie onCreate(), a może onResume(). W ten sposób będzie się utrzymywać w poprzek uruchomieniu aplikacji itp
czy wszyscy deweloperzy używają tej aplikacji tam, czuję, że nie jest to zbyt jasne! –
Nie mogę mówić za innych programistów, ponieważ nie mam dostępu do ich codem –
To jest zalecany i czystszy sposób przekazywania informacji, które masz w jednym działaniu do innych działań. Innym, bardziej hackowskim/niewłaściwym sposobem na to jest zachowanie danych jako pola statycznego w Działaniu i dostęp do niego z innych działań, ale jeśli ktoś zapyta, nie powiedziałem ci tego! :) –
To jest stare pytanie, ale na pewno odpowiem na to: -) Możesz rozszerzyć klasę aplikacji, aby zastosować rozwiązanie Abol3z do każdej aktywności. Utworzyć klasę:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String lang = preferences.getString("lang", "en");
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
i ustawić MyApplication jako klasa aplikacji w manifeście:
<application
android:name=".MyApplication"
...
/>
Można ustawić wartość Lang (w swoim turbinki):
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
preferences.edit().putString("lang", "en").commit();
Zgodnie z [dokumentacją] (https://developer.android.com/reference/android/app/Application.html#onCreate()) aplikacja onCreate() jest wywoływana tylko przy uruchamianiu aplikacji . Tak naprawdę nie zmieniasz języka w środowisku wykonawczym, ale przy następnym uruchomieniu aplikacji, prawda? Edytuj: Ponownie przeczytaj oryginalne pytanie, na swój sposób rozwiązałeś problem. – Micha
btnChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
//preferences.edit().putString("lang", "bn").commit();
String lang = preferences.getString("lang", "en");
//Log.e("lang", "lang in Main Activity:"+lang);
if (lang.equalsIgnoreCase("en")){
setLocale("bn");
preferences.edit().putString("lang", "bn").commit();
btnChange.setText("Eng");
}else if(lang.equalsIgnoreCase("bn")){
setLocale("en");
preferences.edit().putString("lang", "en").commit();
btnChange.setText("বাংলা");
}
}
});
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
finish();
}
używamy dwa języki do celów testowych. zachowaj wszystkie ciągi w różnych folderach o nazwach wartości i wartościach-bn.
Czy ta zmiana będzie obowiązywać w całym systemie Android, czy zmieni się tylko w przypadku aplikacji? Pytam o to, aby użytkownik opuszczający aplikację mógł kontynuować działanie z domyślnym językiem androida –
@KarueBensonKarue zmieni się tylko w aplikacji. –
Dobrze, dziękuję za odpowiedź –