gpt4 book ai didi

android - 以编程方式设置时,为什么 android 无法将语言环境识别为 RTL?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:43 24 4
gpt4 key购买 nike

我编写了一个多语言应用。

我有不同的 values 文件夹用于不同的语言,例如 values-favalues-ru。由于其中一些语言(如波斯语和阿拉伯语)是 RTL,我使用了不同的布局设计,将一些其他布局 .xml 文件放在主 layout-ldrtl 文件夹中 code>layout 文件夹。

我还将名为 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);

我已经使用不同的设备配置测试了该应用程序,一切正常。例如,将设备语言设置为波斯语会导致应用从 values-fa 中读取字符串并从 layout-ldrtl 中读取布局,而当为设备设置阿拉伯语时,值是从 values-ar 读取,布局也从 layout-ldrtl 读取,因为它们都是 RTL 语言。它当然也适用于 LTR 语言。这就是我想要的。

当我以编程方式设置应用程序的语言环境时出现问题。这是我在 MainActivityonCreate() 方法中编写的代码:

Locale myLocale = new Locale("fa");
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);

现在,可以根据语言正确读取值,但永远不会读取 layout-ldrtlvalues-ldrtl。因此,由于错误的 .xml 文件和错误的 isRightToLeft 变量值,应用程序将在 LTR 设计中加载。我测试过的一种解决方案是将那些 .xml 文件分别放在每个语言布局文件夹中,并且有效。但我希望能得到更好更简洁的方法来解决问题。除了解决方案,为什么 android 会这样做?

最佳答案

试试这个:

Resources res = getResources();
Configuration newConfig = new Configuration( res.getConfiguration() );
Locale locale = new Locale("fa");
Locale.setDefault(locale);
newConfig.locale = locale;
newConfig.setLayoutDirection( locale );
res.updateConfiguration( newConfig, null );

关于android - 以编程方式设置时,为什么 android 无法将语言环境识别为 RTL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37141110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com