出于某种未知原因,如果我输入以下字符串:
15 קמ
在文本视图中,它会在“15”和“קמ”之间产生一个新行:
15
קמ
如果我用“km”替换“קמ”,那么它工作正常......
注意:如果字符串的两个部分都是希伯来语,则不会发生这种情况。
有什么线索吗?
我认为希伯来语被解释为 RTL(从右到左),而另一部分是 LTR(从左到右)。鉴于此,TextView 必须表示如下:
\LTR 15 \RTL קמ
我的逻辑猜测是 TextView 将 RTL 部分放在一个新行上,以处理将两个部分放在同一行上的废话。如果你在语言环境是希伯来语时强制它一直 RTL,我认为它会规范渲染并解决问题。我建议您尝试\u200F
在字符串的开头添加“RIGHT-TO-LEFT MARK”字符:
String text="15 קמ";
if (hebrew) {
text="\u200F"+text;
}
此外,似乎某些字体显示了特殊字符的图形解释(虽然它不应该)。您可能需要使用此字体来摆脱它。
当我在同一文本视图中处理字母数字 + 阿拉伯文本时,我也遇到过 TextView 对齐问题,它们会以从左到右的顺序重新对齐所有文本,从而导致荒谬的输出。这种语言问题并不是我们可以直接解决的问题。
我们所做的是将文本分离到更多文本视图(如果适用),在您的情况下,我建议将值和希伯来语文本分离到单独的 TextView 中。
如果您的 textview 可以放在一行中,我想我可能有一个解决方案。这是成功的 xml 布局。
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ellipsize="none"
android:text="15 קמ"
android:maxLines="1"
android:padding="8dp"
android:singleLine="true" />
尝试对希伯来文文本使用 UTF-8 编码,例如:
字符串文本 = "15 קמ";
text = new String(text.getBytes(), "UTF-8");