TextView 上用于 Rtl 和 Ltr 文本的 TextAlignment

TextAlignment on TextView for Rtl and Ltr text

TextView 如何决定文本左对齐或右对齐?

如果您想对齐一段文本,您应该应用 AlignmentSpan,它应该是这 3 个值之一(NORMAL、OPPOSITE、CENTER)。

如果您将对齐设置为 NORMAL,则取决于第一个字符是什么,它会决定将文本左对齐还是右对齐。

下面是文本和对齐方式的一些示例:

嗨:左

@嗨:左

سلام : 对

@سلام: 对

*@嗨:左

*@سلام: 对

嗨 سلام : 左

سلام 你好:对

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

我想要这样的东西:

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

我想找出 patternString 值。

算法似乎是根据文本的第一个字母字符来决定的(即它找到非符号字符并检查它是否是 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;
}