android中res文件夹的优先级?

时间:2012-08-08 05:14:10

标签: android

我创建了一个项目,其中我使用的是不同语言的xml,例如language_hi.xmllanguage_en.xml。所以根据文档,我为每个xml制作了不同的文件夹。例如,对于 language_hi.xml ,我为 language_en 制作了es/values-hi我已经在 res / values-en 和我的每个xml中创建了字符串名称相同,有没有办法在单击一个按钮时选择 language_en.xml ,在另一个事件上选择 language_hi.xml

这是我的xml

RES /值喜/ language_hi.xml

<string name="hello">sachit</string>

<string name="app">colon</string>

RES /值烯/ language_en.xml

<string name="hello">astro</string>

<string name="app">dev</string>

2 个答案:

答案 0 :(得分:2)

您可以选择要在运行时使用的Locale;例如,将其设置为英语将导致使用res\values-en\...文件夹中的值。

为此,需要以下代码:

Resources res = getResources(); // From your context
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = new Locale("en"); // For English
res.updateConfiguration(conf, dm); // Now, update the language

但是,我强烈建议不要使用此功能。当用户运行应用程序时,他们希望它使用默认语言(在许多情况下是英语)或其本地化语言。例如,当他们在俄罗斯时,给某人使用印地语的应用程序真的不好。

请注意,如果您在整个应用中使用en,那么从languages_hi.xml获取值非常困难,而且在任何情况下都不应该这样做。应用程序应始终使用相同的语言,否则将开始混淆用户(除了处理语言之间的翻译的应用程序之外)。但是,如果您有兴趣这样做(出于任何深奥的原因),您应该查看this answer

PS:我猜你知道这一点,但无论如何我应该提一下。如果未使用res\values\...指定手机使用的区域设置,则会使用res\values-xx\...文件夹中的任何字符串。您可以找到有关此here的信息。

答案 1 :(得分:1)

不,没有。 Android在运行时根据设备的语言决定语言。您可以强制更改设备的语言,但这不是一个好的解决方案。相反,您可以自己创建解决方案,并且可以自己更改每个字符串。例如,您可以根据自己的喜好选择语言选项。然后根据所选语言,您可以显示该语言的字符串。假设您有“请输入密码”之类的消息。你可以写一个方法getStringAccordingToLanguage(“password_warning”)。如果语言为英语,此方法将返回“请输入密码”。你可以用这个方法代替字符串。