【问题标题】:android: reflect UI language change on the on-the-fly without reload/restarting appandroid:即时反映 UI 语言更改,无需重新加载/重新启动应用程序
【发布时间】:2011-04-19 11:28:19
【问题描述】:
【问题讨论】:
标签:
android
user-interface
layout
localization
【解决方案1】:
我也遇到了这个问题。我使用了下面的代码,然后它在不刷新活动的情况下更改了语言
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);
onConfigurationChanged(conf);
/*Intent refresh = new Intent(this, AndroidLocalize.class);
startActivity(refresh);*/
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// refresh your views here
lblLang.setText(R.string.langselection);
super.onConfigurationChanged(newConfig);
}
希望对你有帮助......
【解决方案2】:
您应该执行一些步骤
首先,您需要更改配置的语言环境
Resources resources = context.getResources();
Configuration configuration = resources.getConfiguration();
configuration.locale = new Locale(language);
resources.updateConfiguration(configuration, resources.getDisplayMetrics());
其次,如果您希望您的更改直接应用于可见的布局,您可以直接更新视图,也可以调用 activity.recreate() 重新启动当前活动。
而且您还必须坚持您的更改,因为在用户关闭您的应用程序后,您将失去语言更改。
我在我的博文Change Language Programmatically in Android中解释了更详细的解决方案
基本上,您只需在应用程序类上调用 LocaleHelper.onCreate(),如果您想动态更改语言环境,您可以调用 LocaleHelper.setLocale()