2017-01-09 2 views
3

Как TextView решает выравнивать текст влево или вправо?TextAlignment на TextView для текста Rtl и Ltr

Если вы хотите выровнять фрагмент текста, вы должны применить AlignmentSpan, который должен быть одним из этих трех значений (NORMAL, OPPOSITE, CENTER).

Если вы установили выравнивание в NORMAL, это зависит от того, что является первым символом, он решает выравнивать текст влево или вправо.

Ниже приведены некоторые примеры текста и выравнивания:

Hi: слева

@Hi: левый

سلام: правый

@ سلام: правый

* @ Привет : Левый

* @ سلام: Право

Привет سلام: Левый

سلام Привет: правый

Я хочу знать, как именно TextView определяет выравнивание текста? Если возможно, задайте шаблон регулярного выражения, чтобы определить выравнивание текста.

Я хочу что-то вроде этого:

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

Я хочу узнать значение patternString.

ответ

3

Кажется, алгоритм решает основываться на символьном символе на первой букве (т. Е. Находит несимволический символ и проверяет, является ли он символом RTL или нет).

Вы можете использовать \p{L} или \p{Letter} в RegEx найти первый матч, а затем сравнить его первый символ с диапазоном символов Юникода RTL:

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; 
} 
Смежные вопросы