是否建议在Android应用程序中创建语言选择器,还是应该只为语言创建必要的资源文件(drawables / strings)?如果某人的手机语言设置为英语,但他想用德语使用该应用程序,他可以通过选择器更改语言。
我已经尝试了to implement the selector with this answer但是当我关闭应用时,语言重置为默认值。我没有找到任何解决方案,所以也许做一个语言选择器不是一个好主意。有什么建议吗?
谢谢!
答案 0 :(得分:2)
使用依赖应用程序外部区域设置的standard approach更简单。但是有充分的理由希望在应用程序中切换区域设置,例如,如果您正在编写可能由多个人使用的自助服务终端应用程序。
您仍然可以通过覆盖当前配置的区域设置来利用内置资源选择。但是正如您所发现的,语言环境不断重置为设备默认值。我发现如果你启动另一个活动,它会继承启动它的活动的语言环境。但是,如果稍后重新创建该活动(例如在方向更改上),则会使用设备的默认区域设置重新创建该活动。要维护首选语言区域,请在调用onCreate(...)
之前在每项活动的setContentView(...)
中执行此操作:
Resources res = getBaseContext().getResources();
Configuration config = res.getConfiguration();
Locale locale = new Locale("es", "US"); // get preferred locale from shared preferences or something
config.locale = locale; // config.setLocale(...) requires API 17
res.updateConfiguration(config, res.getDisplayMetrics());
答案 1 :(得分:1)
要处理重置问题,您应该使用SharedPreferences: http://developer.android.com/reference/android/content/SharedPreferences.html
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("language","value");
editor.apply();
答案 2 :(得分:1)
如果您使用此处推荐的本地化语法:
http://developer.android.com/training/basics/supporting-devices/languages.html
你不会有这个问题。如果有人在手机上使用德语作为语言,并且您正确设置了本地化,那么当您加载应用程序时,您将使用德语作为正确的语言。这也适用于任何语言,并为您提供所需的多功能性。
MyProject/
res/
values/
strings.xml
values-es/ <---Spanish
strings.xml
values-fr/ <---- French
strings.xml
您需要确保在创建values文件夹时使用iso-630-1
语言代码。
如果您想让用户只在您的应用上更改其语言偏好设置,您可以使用SharedPreferences
来记住他们的选择,设置加载/启动应用时的语言。