我想讓用戶使用微調器(或任何方式)更改我的應用程序的語言。 我嘗試了很多方法,但他們改變了這個活動的語言,不是所有的活動,我想保存它,所以當用戶重新啓動應用程序時,他會找到最後選擇的語言。Android如何在運行時更改應用程序語言
回答
你可以使用在轉你想
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());
此代碼或任何方式,那麼你應該保存語言這樣
SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",languageToLoad);
editor.commit();
和使用在onCreate()
的每個活動中的相同代碼加載來自SharedPreferences的languageToLoad
使用SharedPreferences跟蹤用戶選擇的語言,然後將活動設置爲在onCreate()和onResume()方法中使用該語言。通過這種方式,將整個應用程序重新啓動等堅持
做所有開發者在這裏應用程序使用這種方式,我覺得它不是很清楚! –
我無法爲其他開發者說話,因爲我無法訪問他們的代碼 –
嗯,是的,這是將您在一項活動中的信息傳遞給其他活動的建議和更簡潔的方法。另一種方法是將數據保存爲活動中的靜態字段,並從其他活動中訪問它,但如果有人問起,我沒有告訴你! :) –
這是一個古老的問題,但無論如何我都會回答: - ) 您可以擴展應用程序類以在每個活動上應用Abol3z的解決方案。在清單
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());
}
}
並設置爲MyApplication的應用程序類:創建類
<application
android:name=".MyApplication"
...
/>
您可以設置郎值(在你的微調):
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
preferences.edit().putString("lang", "en").commit();
根據[文檔](https://developer.android.com/reference/android/app/Application.html#onCreate()),應用程序啓動時僅調用Application onCreate() 。所以你不是真的在運行時改變語言,但是在下一個應用程序啓動時,對吧?編輯:重新閱讀原始問題,你的方式畢竟解決了問題。 – 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();
}
我們使用兩種語言用於測試目的。將所有字符串保存在不同的文件夾名稱值和值-bn中。
- 1. 如何在運行時與appcelerator更改語言應用程序
- 2. 在運行時使用按鈕更改應用程序語言
- 3. 在運行時更改應用程序語言
- 4. 在運行時更改語言的應用程序
- 5. 在Android中更改運行時語言
- 6. 如何在運行時更改語言
- 7. 更改Android應用程序的語言
- 8. 更改Android應用程序語言
- 9. 運行時更改WinForms應用程序語言
- 10. Android - 更改應用程序本身的語言環境語言
- 11. 更改語言在應用程序
- 12. 在應用程序中更改語言
- 13. 如何在應用程序的運行時切換語言?
- 14. 作爲設備語言更改更改應用程序語言
- 15. 用戶選擇語言時如何更改應用程序的語言?
- 16. 當用戶選擇語言時如何更改應用程序的語言?
- 17. 如何從我的Android應用程序運行語言
- 18. UWP在運行時更改CalendarDatePicker語言
- 19. 在運行時更改Qt語言
- 20. 在運行時更改NSIS語言
- 21. 在運行時更改語言環境?
- 22. 鍵盤語言在運行時更改?
- 23. 在C#winform運行時更改語言
- 24. 在運行時更改語言
- 25. 如何在Android中單擊按鈕時更改應用程序的語言
- 26. 如何實時更改應用程序語言?
- 27. 如何在首選項更改或語言更改(語言環境)上刷新Android應用程序
- 28. 在Android中使用微調器更改應用程序語言
- 29. 更改ios應用程序的語言
- 30. 更改應用程序語言
這會改變整個android系統中的lang還是隻會改變應用程序?我這樣問,以便當用戶離開應用程序時,他們將能夠繼續使用android默認lang –
@KarueBensonKarue,它將僅在應用程序中更改。 –
很好,感謝您的回覆 –