我有一个多语言应用程序,主要语言是英语,次要语言是阿拉伯语。
如文档中所述,
- 我已
android:supportsRtl="true"
在清单中添加。 - 我已将所有带有
left
和right
属性的 xml 属性分别更改为start
和end
。 - 我已经添加了阿拉伯语字符串
strings-ar
(对于其他资源也是如此)。
上述设置工作正常。更改为Locale
后ar-AE
,阿拉伯语文本和资源会正确显示在我的活动中。
但是,每次我
Activity
使用 aWebView
和/或 a导航到 aWebViewClient
时,区域设置、文本和布局方向都会突然恢复为设备默认值。
进一步提示:
- 这只发生在装有Android 7.0的 Nexus 6P 上。在 Android 6.0.1 及更低版本上一切正常。
- 仅当我导航到
Activity
具有 aWebView
和/或 aWebViewClient
(并且我有多个)的位置时,才会发生区域设置的突然转变。它不会发生在任何其他活动上。
Android 7.0 支持多语言环境,允许用户设置多个默认语言环境。因此,如果我将主要语言环境设置为Locale.UK
:
然后在导航到 时
WebView
,区域设置从ar-AE
变为en-GB
。
Android 7.0 API 更改:
如API 更改列表所示,与语言环境有关的新方法已添加到 API 24 中的以下类中:
Locale
:
Configuration
:
但是,我正在使用 API 23 构建我的应用程序,并且没有使用任何这些新方法。
此外 ...
Nexus 6P 模拟器也出现此问题。
为了获得默认语言环境,我使用
Locale.getDefault()
.要设置默认语言环境,我使用以下代码:
public static void setLocale(Locale locale){ Locale.setDefault(locale); Configuration config = new Configuration(); config.setLocale(locale); Context context = MyApplication.getInstance(); context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); }
有没有人遇到过这个问题?这是什么原因,我该如何解决?
参考:
2. 多语言支持 - 语言和区域设置。
3. 警惕默认语言环境。