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

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

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

我还将一个名为is_right_to_left.xml的文件放在一个名为values-ldrtl的文件夹中,该文件夹定义了如下所示的变量:

true

我在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 );

标签:locale,globalization,right-to-left,android,localization

来源: https://codeday.me/bug/20191027/1941457.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值