我在这里读到,Android 应用程序中的本地化是通过与应用程序一起部署的 XML 文件进行的。
是否可以在运行时将这些 XML 文件动态加载到应用程序中?
如果不是,是否可以覆盖 UI XML 和资源 XML 之间的绑定,以便我可以绑定到我自己的、动态加载的 XML 文件而不是其中的一个res/values
?
谢谢
我在这里读到,Android 应用程序中的本地化是通过与应用程序一起部署的 XML 文件进行的。
是否可以在运行时将这些 XML 文件动态加载到应用程序中?
如果不是,是否可以覆盖 UI XML 和资源 XML 之间的绑定,以便我可以绑定到我自己的、动态加载的 XML 文件而不是其中的一个res/values
?
谢谢
是否可以在运行时将这些 xml 文件动态加载到应用程序中?
不,对不起。
如果不是,是否可以覆盖 UI xml 和资源 XML 之间的绑定,以便我可以绑定到我自己的、动态加载的 xml 文件而不是 res/values 中的一个?
res/values/
除非您使用它,否则从未使用过任何东西。因此,没有什么可以“覆盖”。
例如,假设您有一个TextView
. 您希望它显示一些文本。您希望该文本被本地化。通常,您会设置一系列字符串资源,每个翻译一个,然后将这些字符串资源用于TextView
(例如,android:text
在布局中或setText()
在 Java 中)。在您的情况下,您不会设置字符串资源,而是“做自己的事情”,并setText()
根据需要调用。
您在方法中失去的是自动转换。如果用户在您的应用程序运行时切换语言,Android 会将其视为配置更改并在您的活动返回前台时重新启动它们。通常,这会自动加载新的字符串资源。在您的情况下,它不会,因为您没有使用字符串资源。相反,您需要告诉 Android 不要重新启动您的活动(通过android:configChanges
)并自己手动重新加载您的所有TextView
等小部件。如果你忘记了一个,那么用户就完蛋了。
恕我直言,除非有人用枪指着你的脑袋强迫你尝试更改翻译而不发布新版本的应用程序,否则只需使用字符串资源并发布新版本的应用程序。
如果您愿意,您可以重新发明轮子并实现您自己的基于语言环境的资源加载。
您可以通过以下方式获取当前语言环境
Locale = context.getResources().getConfiguration().locale;
然后使用结果来适当地加载你自己的字符串/绘图/任何东西。当然,您必须以编程方式完成所有这些工作(XML 布局不会自动使用正确的资源)。
我强烈建议坚持使用标准的本地化技术。