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;
}
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;
}