更改语言环境后未调用 onConfigurationChange

Posted

技术标签:

【中文标题】更改语言环境后未调用 onConfigurationChange【英文标题】:onConfigurationChange not called after changing locale 【发布时间】:2013-09-14 13:05:27 【问题描述】:

我必须在从一个片段更改语言时刷新片段内容。所以我想使用我的主要活动中的 onConfigurationChange 方法(该活动控制所有片段)并在更改语言环境时重新创建所有片段。但是在更改语言环境时不会调用此方法。

我在清单文件的活动标签下包含了语言环境。 onConfigurationChange 在改变方向时被调用。

我正在更改此链接Change language programmatically in android 中给出的语言及其工作方式。

有人可以说明解决此问题需要进行哪些更改。

【问题讨论】:

【参考方案1】:

在清单文件中使用layoutDirection 属性。

【讨论】:

【参考方案2】:

您可以从 Application 扩展并在清单中设置它。 然后,将 onConfigurationChanged 放在那里,并检查之前的语言环境是否与当前的语言环境相同:

if(!_currentLocale.equals(newConfig.locale))
  
  _currentLocale=newConfig.locale;
  // locale has changed
  

“_currentLocale”变量应在新类(扩展应用程序)的 onCreate 方法上初始化,如下所示:

  @Override
  public void onCreate()
    
    super.onCreate();
    _currentLocale=getResources().getConfiguration().locale;
    

【讨论】:

【参考方案3】:

对于遇到此问题的其他人,OP 是正确的,但有点不清楚。您必须定义 android:configChanges="layoutDirection|locale" 才能调用 onConfigurationChanged() 我认为这是必要的,因为语言环境更改也可能影响布局方向(对于 RTL 语言),因此仅声明语言环境可能还不够,但这只是我对此事的假设。

【讨论】:

酷!我不知道 layoutDirection 也应该被添加。谢谢! 不工作,我的项目的 api 级别就像minSdkVersion 19 targetSdkVersion 26。有什么想法吗?@Alex.F

以上是关于更改语言环境后未调用 onConfigurationChange的主要内容,如果未能解决你的问题,请参考以下文章

在 Activity 中重新创建后未调用 onResume

React Test 在状态更改后未按文本查找元素

GoogleMap(Android)投影可见区域在方向更改后未更新?

Django迁移更改目录结构后未检测到更改

使用 Spring JPA “刷新”实体后未反映更改

通过 Java 代码完成 impex 导入后未反映更改