Знак пунктуации отображается при запуске текста LTR в ОС RTL - PullRequest
0 голосов
/ 14 ноября 2018

Рассмотрим фрагмент:

<TextView
    android:layout_width="wrap_content"
    android:layout_width="wrap_content"
    android:text="Hello!"
    android:textDirection="locale"/>

В результате выполнения кода "! Hello" будет отображаться вывод вместо ожидаемого "Hello!"когда язык ОС установлен на RTL.Это наблюдается только с textDirection, установленным на «locale», в противном случае текст отображается правильно.

Мне нужно установить TextDirection в качестве локали, чтобы текст выровнялся в текстовом представлении в соответствии с локалью ОС.Есть ли способ использовать текстовое направление в качестве локали, не мешая визуализации текста или любому другому простому решению для достижения того же эффекта.

PS: Я хочу применить это на глобальном уровне ко всем текстовым представлениям и, следовательно,не может использовать textAlignment (как viewStart), так как это может испортить свойство гравитации, установленное в представлениях.(в частности, гравитация, установленная как горизонталь по центру, будет игнорироваться в пользу textalignment = viewStart)

1 Ответ

0 голосов
/ 14 ноября 2018

В "locale" нет ничего особенного, такое же отображение появляется, когда вы используете "rtl" для textDirection поля, текст которого LTR заканчивается на !. Или ., или любая другая пунктуация без четкой направленности.

Что можно сделать:

  1. оканчивать эти тексты символом &lrm;:

    android:text="Hello!\u200e"
    
  2. выберите "ltr" textDirection для этих полей.
  3. во время выполнения идентифицируйте тестовые поля, которые начинаются с последовательности LTR или содержат только последовательность LTR (эта логика зависит от вашего выбора), и примените к этим полям правила 1. или 2. (выше).
  4. используйте android:textAlignment="viewStart" вместо:

    <FrameLayout
      android:layoutDirection="rtl" ...>
    
    <TextView
      android:text="Hello!"
      android:textAlignment="viewStart"
      android:layout_width="80dp"
      android:padding="12dp"
      android:background="@android:color/black"
      android:textColor="@android:color/white"
      android:layout_height="wrap_content"
      android:layout_gravity="center_horizontal"
    />
    
...