在RTL中格式化时,TextView中的数字会反转

时间:2018-05-31 12:31:06

标签: android textview right-to-left

在RTL格式化时,TextView内的数字会反转。 当数字位于TextView内的文本末尾时,它们会在开始时被重新启动并进行应用。怎么解决?

4 个答案:

答案 0 :(得分:1)

误解: RTL语言中的数字(如ARABIC)应从RTL写入阿拉伯数字,以避免出现任何问题,例如:“تمإرسالرسالةنصيةللرقم١٢٣٤”注意,我写的是“رسالةنصية”而不是“ SMSرسالة”。

问题及其解决方案: Mixing more than one direction languages需要更多步骤,您需要告诉系统“嘿,这是RTL字,将其添加到序列中”。 So you may need to do this implicitly,即:

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

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

更好的方法:

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

Consider BidiFormatter:实用程序类,用于格式化文本,以便在可能具有相反方向的上下文中显示而不会造成任何干扰

示例:

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

现在,result的格式正确了。

More examples on how BidiFormatter work.

答案 1 :(得分:1)

如果要防止以RTL格式格式化时TextView的数字反转,只需为XML文件中的特定TextView指定android:textDirection="ltr"属性。它将以通常的顺序显示数字。

答案 2 :(得分:0)

将textview gravity设置为开始

android:gravity="start"

答案 3 :(得分:0)

尝试一下

清单文件中的

android:supportsRtl =“ false”

在布局中

和android:gravity =“ start”。