当我在android中更改app中的语言环境时,如何重新加载当前视图

时间:2014-02-01 04:17:13

标签: android android-layout android-fragments locale android-location

我目前正在改变应用中的语言。我的应用程序结构是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"));

2 个答案:

答案 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);