TextView for Rtl和Ltr文本的TextAlignment

时间:2017-01-09 11:52:01

标签: android textview text-alignment

TextView如何决定左右对齐文字?

如果要对齐一段文本,则应该应用AlignmentSpan,它应该是这三个值之一(NORMAL,OPPOSITE,CENTER)。

如果将对齐设置为NORMAL,则取决于它决定左右对齐文本的第一个字符。

下面是一些文字和对齐的例子:

嗨:离开

@Hi:左

سلام:对

@سلام:对

* @嗨:左

* @سلام:对

嗨سلام:左

سلام嗨:对

我想知道textView究竟是如何确定文本对齐的? 如果可能,请提供正则表达式模式以确定文本对齐方式。

我想要这样的事情:

Pattern regex = Pattern.compile(patternString);
if(regex.matcher(text).matches()) {
    // now text will be left aligned
}

我想找出patternString值。

1 个答案:

答案 0 :(得分:3)

似乎算法基于文本的第一个基于字母的字符决定(即它找到非符号字符并检查它是否是RTL字符)。

您可以在RegEx中使用\p{L}\p{Letter}来查找第一个匹配项,然后将其第一个字符与RTL unicode字符的范围进行比较:

boolean isRtl(String str) {
    Pattern p = Pattern.compile("([^\\p{L}]*)(\\p{L})(.*)";
    Matcher m = p.matcher(str);
    if (m.matches()) {
      String firstMatch = m.group(2);
      char c = firstMatch.charAt(0);
      return c >= 0x590 && c <= 0x6ff;
    }
    return false;
}