问题 更改语言环境后未调用onConfigurationChange


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

我在清单文件的activity标记下包含了locale。在改变方向时调用onConfigurationChange。

我正在改变这个链接中给出的语言 在Android中以编程方式更改语言 和它的工作。

有人可以澄清解决此问题需要做哪些更改。


11890
2017-09-10 17:33


起源



答案:


对于遇到此问题的其他人来说,OP是对的,但有点不清楚。
你必须定义 android:configChanges="layoutDirection|locale" 为了 onConfigurationChanged() 被称为。
我认为这是必要的,因为区域设置更改也可能会影响布局方向(对于RTL语言),因此声明区域设置可能还不够,但这只是我对这个问题的假设。


15
2017-07-25 17:26



你救了我的一天! - injecteer
凉!我不知道还应该添加layoutDirection。谢谢! - foxanna
这实际上不起作用 - Vahe Gharibyan
不适合我的情况.. - Sunil Soni
不工作,我的项目的api级别就像 minSdkVersion 19  和  targetSdkVersion 26。任何想法?@Alex.F - Maulik Dodia


答案:


对于遇到此问题的其他人来说,OP是对的,但有点不清楚。
你必须定义 android:configChanges="layoutDirection|locale" 为了 onConfigurationChanged() 被称为。
我认为这是必要的,因为区域设置更改也可能会影响布局方向(对于RTL语言),因此声明区域设置可能还不够,但这只是我对这个问题的假设。


15
2017-07-25 17:26



你救了我的一天! - injecteer
凉!我不知道还应该添加layoutDirection。谢谢! - foxanna
这实际上不起作用 - Vahe Gharibyan
不适合我的情况.. - Sunil Soni
不工作,我的项目的api级别就像 minSdkVersion 19  和  targetSdkVersion 26。任何想法?@Alex.F - Maulik Dodia


清单中的用户layoutDirection属性


0
2018-02-22 00:35





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

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

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

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

0