为何通过编程设置时android无法将语言环境识别为RTL?

为何通过编程设置时android无法将语言环境识别为RTL?,第1张

概述我写了一个多语言的应用程序.对于不同的语言,例如values-fa和values-ru,我有不同的values文件夹.由于其中一些语言(例如波斯语和阿拉伯语)是RTL,因此我通过将其他一些布局.xml文件放在主布局文件夹旁边的layout-ldrtl文件夹中,使用了不同的布局设计.我还将一个名为is_right_to_le

我写了一个多语言的应用程序.

对于不同的语言,例如values-fa和values-ru,我有不同的values文件夹.由于其中一些语言(例如波斯语和阿拉伯语)是RTL,因此我通过将其他一些布局.xml文件放在主布局文件夹旁边的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);

我已经使用不同的设备配置测试了该应用程序,并且一切正常工作.例如,将设备语言设置为波斯语会使应用程序从values-fa读取字符串,并从layout-ldrtl读取布局,而当为设备设置阿拉伯语时,则从values-ar读取值,并且还从layout-read读取布局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.因此,由于错误的.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无法将语言环境识别为RTL?全部内容,希望文章能够帮你解决为何通过编程设置时android无法将语言环境识别为RTL?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1090603.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存