更改语言环境后,onConfigurationChange未被调用

15
我需要在一个片段中更改语言时刷新片段的内容。因此,我考虑使用在我的主活动中的onConfigurationChange方法(此活动控制所有片段),并在更改语言环境时重新创建所有片段。但是,在更改语言环境时没有调用此方法。
我已经在清单文件的活动标签下包含了locale。在更改方向时,会调用onConfigurationChange。
我按照在Android中以编程方式更改语言中给出的方法更改语言,并且它可以工作。
请问有人能够澄清需要哪些更改以解决此问题吗?
3个回答

23

对于遇到此问题的其他人,OP是正确的但表述不够清晰。
您必须定义android:configChanges="layoutDirection|locale", 才能调用onConfigurationChanged()
我认为这是必要的,因为语言环境的变化可能也会影响布局方向(对于RTL语言),所以仅声明语言环境可能不足够,然而这只是我的猜测。


太酷了!我不知道还需要添加layoutDirection。谢谢! - foxanna
7
无法工作,我的项目的API级别类似于“minSdkVersion 19”和“targetSdkVersion 26”。有任何想法?@Alex.F - Maulik Dodia

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

0

你可以从 Application 类中继承,并在 Manifest 中设置它。 然后,在 onConfigurationChanged 方法中添加相关代码,检查之前的语言环境是否与当前的语言环境相同:

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

"_currentLocale"变量应该在新类(扩展Application)的onCreate方法中进行初始化,如下所示:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接