我目前正在改变应用中的语言。我的应用程序结构是tab host + fragment我已经成功更改了语言环境,但这很奇怪。
这意味着在我运行更改区域设置代码后,它不会立即更改视图,而是仅在我转到另一个选项卡时。我认为这是因为我需要重新加载视图,但有没有办法在不杀死的情况下实现这一点并重新启动活动?
因为有一些goolge分析代码,如果用户再次启动活动,条目号将会增加?有重新加载视图的标准方法吗?感谢
更改区域设置函数位于tabhost片段之一,我必须刷新tabhost(主要活动)中的视图和当前片段。
public OnClickListener setChangeLangListener(final String lang) {
OnClickListener changeLangListener = new OnClickListener() {
@Override
public void onClick(View arg0) {
Configuration config = new Configuration(getResources()
.getConfiguration());
if (lang.equals("en")) {
config.locale = Locale.ENGLISH;
chi.setTextColor(oldColor);
eng.setTextColor(getActivity().getResources().getColor(android.R.color.white));
} else {
config.locale = Locale.TRADITIONAL_CHINESE;
eng.setTextColor(oldColor);
chi.setTextColor(getActivity().getResources().getColor(android.R.color.white));
}
getResources().updateConfiguration(config,
getResources().getDisplayMetrics());
}
};
return changeLangListener;
}
eng.setOnClickListener(setChangeLangListener("en"));
chi.setOnClickListener(setChangeLangListener("zh"));
答案 0 :(得分:1)
Allright将此添加到您的清单
android:configChanges="locale"
并覆盖活动中的onConfigurationChanged()
@Override
public void onConfigurationChanged(Configuration newConfig) {
// refresh your views here
super.onConfigurationChanged(newConfig);
}
转到here了解更多信息 希望能帮助到你。 :)
答案 1 :(得分:1)
您是否尝试过调用setContentView。例如:
String languageToLoad = "fr"; // your language
Locale locale = new Locale(languageToLoad);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
activity.setContentView(R.layout.your_layout);