数字和希伯来语文本会导致不必要的新行

时间:2013-06-14 16:01:44

标签: android textview hebrew

由于某些未知原因,如果我输入以下字符串:

15 קמ

在文本视图中,它会在“15”和“קמ”之间产生一个新行:

15
קמ

如果我用“km”替换“קמ”,那么它可以正常工作......

注意:如果两个字符串的部分都是希伯来语,则不会发生这种情况。

任何线索?

4 个答案:

答案 0 :(得分:2)

我认为希伯来语被解释为RTL(从右到左),而另一部分是LTR(从左到右)。鉴于此,TextView必须代表如下:

\LTR 15 \RTL קמ

我的逻辑猜测是TextView将RTL部分放在一个新行上,以处理将两个部分放在同一行上的无意义。如果你在语言环境是希伯来语的时候一直强制RTL,我认为它会调节渲染并解决问题。我建议你尝试在字符串的开头添加“RIGHT-TO-LEFT MARK”字符\u200F

String text="15 קמ";
if (hebrew) {
    text="\u200F"+text;
}

此外,似乎有些字体显示特殊字符的图形解释(虽然它不应该)。您可能需要使用此font来摆脱它。

答案 1 :(得分:1)

当我在同一文本视图中使用字母数字+阿拉伯语文本时,我也遇到了TextView对齐问题,他们将按从左到右的顺序重新排列所有文本,这会产生荒谬的输出。这种语言问题并不是我们可以直接解决的问题。

我们所做的是将文本分离为更多文本视图(如果适用),在您的情况下,我建议将值和希伯来文本分离为单独的TextView。

答案 2 :(得分:0)

尝试对希伯来语文本使用UTF-8编码,例如:

  

String text =“15קמ”;
  text = new String(text.getBytes(),“UTF-8”);

答案 3 :(得分:0)

如果你的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" />