当我在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()也适用于TabHostFragments【参考方案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 版本的应用程序语言

侦听firebase数据库节点时如何处理kotlin中的竞争条件

Android 在应用程序中更改和设置默认语言环境

在运行时更改语言环境时刷新(重新创建)后台堆栈中的活动

更改设备方向时如何为uiimageview设置动画

果冻豆和冰淇淋三明治中的android数字选择器默认设计更改