当我在android中更改应用程序中的语言环境时如何重新加载当前视图
Posted
技术标签:
【中文标题】当我在android中更改应用程序中的语言环境时如何重新加载当前视图【英文标题】:How to reload the current view when I change the locale in app in android 【发布时间】:2014-02-24 23:17:34 【问题描述】:我目前正在更改应用程序中的语言。我的应用结构是 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"));
【问题讨论】:
【参考方案1】:好的,把它添加到你的清单中
android:configChanges="locale"
并在您的活动中覆盖onConfigurationChanged()
@Override
public void onConfigurationChanged(Configuration newConfig)
// refresh your views here
super.onConfigurationChanged(newConfig);
去here了解更多信息。 希望能帮助到你。 :)
【讨论】:
这里的 // 刷新您的视图中的代码是什么?我有一个 tabhost 和一个片段。我认为我应该使用 invalidate 使片段中的图像视图无效,但是我应该如何处理 tabhost 中的视图(图标)?谢谢 你可以创建一个方法来更新你想要的any
视图,因为onConfigurationChanged()
也适用于TabHost
和Fragments
【参考方案2】:
您是否尝试过调用 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);
【讨论】:
java.lang.IllegalStateException: No tab known for tag null 你能检查一下你的标签主机和片段的结构吗,请张贴正在实现的代码在哪里以及你在哪一行得到它......以上是关于当我在android中更改应用程序中的语言环境时如何重新加载当前视图的主要内容,如果未能解决你的问题,请参考以下文章
Android - 更改所有 Android 版本的应用程序语言