我想让用户使用微调器(或任何方式)更改我的应用程序的语言。 我尝试了很多方法,但他们改变了这个活动的语言,不是所有的活动,我想保存它,所以当用户重新启动应用程序时,他会找到最后选择的语言。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,它将仅在应用程序中更改。 –
很好,感谢您的回复 –