以 RTL 格式格式化时 TextView 内的数字会反转

2024-04-11

里面的数字TextView以 RTL 格式格式化时会发生反转。 当数字位于文本内的末尾时TextView他们逆转了。我怎样才能以编程方式解决这个问题?

例如,下面的数字是相反的:

它们应该显示为:


误解:像 ARABIC 这样的 RTL 语言中的数字应该从 RTL 与阿拉伯数字一起书写,以避免出现任何问题,即:“Хурская р сурай арабрим ١٢٣٤” 请注意,我写的是“Храл Т٣٤”,而不是“SMS Сарсал”。

问题及其解决方案: 混合多种方向语言 http://unicode.org/reports/tr9/#Directional_Formatting_Characters需要更多步骤,您需要告诉系统“嘿,这是 RTL 单词,将其添加到序列中”。所以你可能需要隐式地执行此操作 http://unicode.org/reports/tr9/#Implicit_Directional_Marks, i.e:

\u200f + تم إرسال رسالة نصية إلى + number

考虑 StringBuilder:对于开发人员来说,使用 RTL 语言开发东西是非常痛苦的plus(+) 表示法,这非常令人困惑且容易出错。

更好的方法:

builder.append("\u061C").append(" تم إرسال رسالة نصية لـ").append("\u200E").append("+0123456789")

考虑 BidiFormatter: https://developer.android.com/reference/android/text/BidiFormatter.html用于格式化文本的实用程序类,以便在可能相反方向的上下文中显示而不会出现乱码

Example:

String text = "{0} تم إرسال رسالة نصية لـ ";
String phone = BidiFormatter.getInstance().unicodeWrap("+961 01 234 567");
String result = MessageFormat.format(text,phone);

Now, result将被正确格式化。

有关 BidiFormatter 如何工作的更多示例。 https://www.programcreek.com/java-api-examples/index.php?api=android.support.v4.text.BidiFormatter

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以 RTL 格式格式化时 TextView 内的数字会反转 的相关文章

随机推荐