我写了一个多语言的应用程序 .
我有不同语言的 values
文件夹,如 values-fa
和 values-ru
. 由于其中一些语言如波斯语和阿拉伯语是RTL,我使用不同的布局设计,将一些其他布局.xml文件放在主 layout
文件夹旁边的文件夹 layout-ldrtl
中 .
我还将一个名为 is_right_to_left.xml
的文件放在一个名为 values-ldrtl
的文件夹中,该文件夹定义了一个如下变量:
<bool name="is_right_to_left">true</bool>
我在 values
文件夹中有相同的文件,并将变量值设置为 false
.
每当在我需要知道的代码中,我使用这一行来理解当前的语言环境是否是RTL的:
isRightToLeft = context.getResources().getBoolean(R.bool.is_right_to_left);
我用不同的设备配置测试了应用程序,一切都像魅力一样 . 例如,将设备语言设置为Farsi会导致应用程序从 values-fa
读取字符串,并从 layout-ldrtl
读取布局,而当为设备设置阿拉伯语时,将从 values-ar
读取值,并且也会从 layout-ldrtl
读取布局,因为它们都是RTL语言 . 它当然也适用于LTR语言 . 这就是我想要的 .
当我以编程方式设置应用程序的区域设置时,会发生此问题 . 这是我在 MainActivity
的 onCreate()
方法中编写的代码:
Locale myLocale = new Locale("fa");
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
现在,根据语言正确读取值,但从不读取 layout-ldrtl
和 values-ldrtl
. 因此,应用程序将加载LTR设计,因为错误的.xml文件和错误的 isRightToLeft
变量值 . 我测试过的一个解决方案是将这些.xml文件分别放在每个语言布局文件夹中,并且它可以工作 . 但我希望能够找到一种更好,更整洁的方法来解决问题 . 除了解决方案,为什么android会以这种方式行事?
1 回答
试试这个: