DataBinding 会干扰 Activity 的本地化吗?

Posted

技术标签:

【中文标题】DataBinding 会干扰 Activity 的本地化吗?【英文标题】:Can DataBinding interfere with localizing an Activity? 【发布时间】:2017-09-19 01:09:32 【问题描述】:

TL;DR

我有一个支持多种语言的应用。尽管使用了所有常用的本地化方法,但一项活动没有被翻译。它是应用中唯一充分利用DataBinding的Activity。

完整解释

我有一个使用DataBindingActivity。所以基本上,该 Activity 的整个 XML 布局都包含在 <layout> 标记内。这就是我膨胀视图并获得绑定的方式:

SomeActivityBinding binding = DataBindingUtil.setContentView(this, R.layout.some_activity);

XML中有多个TextViews的文字是这样设置的:

... android:text="@string/<name of a string>" ...

我们为用户提供预定义的语言选项并使用设置应用程序区域设置

Locale.setDefault(new Locale("&lt;language name&gt;"));

在英语语言环境中,一切正常。

当应用程序处于不同的区域设置时,相关活动中的字符串仍以英语显示 - 即使这些字符串已被翻译成适当的语言,并且位于相同的字符串文件中,其余的应用程序从中获取字符串。在该活动开始之前,应用程序很好 - 在活动开始并且我退出它之后,应用程序恢复到英语语言环境,直到它被杀死并重新启动。如果该 Activity 从未打开,则应用会按预期运行。

有人知道是什么原因造成的吗?谢谢。

【问题讨论】:

我的理解是应用程序将从设备中检索语言环境,无需以编程方式对其进行干预。所以我的猜测是你用 Locale.setDefault(...) 搞砸了,但我很可能错了。 @Ascorbin 很好,无论设备区域设置如何,只要我们支持,我们仍然愿意为用户提供使用他们喜欢的任何语言的应用程序的选项。请注意,该应用程序的其余部分工作正常。 当您不使用数据绑定语法时,将使用应用资源的常规规则。您是在重复使用 SomeActivityBinding 还是像往常一样在更改语言环境时重新填充它? @GeorgeMount 好点,但我没有重复使用该绑定 - 每次调用 onCreate 时它都会重新膨胀。 【参考方案1】:

弄清楚发生了什么。它与 ViewBinding 无关。该活动以横向模式启动 - 由于某种原因会重置应用程序区域设置。 This answer 帮我修好了。

【讨论】:

以上是关于DataBinding 会干扰 Activity 的本地化吗?的主要内容,如果未能解决你的问题,请参考以下文章

android 自定义View 使用 DataBinding 笔记

jetpack之databinding

jetpack之databinding

jetpack之databinding

Android databinding的接入使用与详解

从 DataBinding 实例中查找类似视图