Как заставить textView, содержащий символы ltr, выровнять по правому краю в среде RTL - PullRequest
3 голосов
/ 12 марта 2019

все "линии" используют одну и ту же структуру (ширина, высота, гравитация, ...:

<LinearLayout
  android:layout_width="fill_parent"
  android:layout_height="30dp"
  android:orientation="horizontal">

  <TextView
     android:id="@+id/labelMkt1"
     android:layout_width="0dp"
     android:layout_height="30dp"
     android:layout_weight="0.5"
     android:gravity="center_vertical"   // I also tried "center_vertical|start"
     android:text="@string/report_mkt"                       
     android:textColor="#000" /> <!-- force gravity start, textAlignment=textStart, did not work, useful for RTL layout with EN characters -->

  <TextView
    android:id="@+id/labelMkt2"
    android:layout_width="0dp"
    android:layout_height="30dp"
    android:layout_weight="1"
    android:gravity="center_vertical"
    android:text="@string/device_param_empty" />
</LinearLayout>

но если label1 содержит английские символы (например, "MKT"), текст выравнивается по левому краю.

mkt is left aligned

  • Я пытался использовать android:gravity="center_vertical|start" (хотя по умолчанию используется "start"), и это не помогло.

  • Я пытался добавить android:textAlignment="textStart", и это не помогло.

Как заставить label1 выравниваться вправо, как и все остальные ярлыки?

1 Ответ

1 голос
/ 12 марта 2019

Вы можете использовать android:textDirection="rtl", поэтому независимо от того, будет ли текст на иврите или английском, он будет начинаться с правой стороны вашего обзора и не будет переходить в другое направление при изменении языка.

Примечание - Я думаю, что android:gravity не сработало для вас, потому что на иврите пишется RTL, а на английском пишется LTR.
так что когда вы включите гравитацию - начните, и язык будет английский, ваш текст будет начинаться с левой стороны вашего обзора.

Редактировать с рабочим примером:

Макет:

LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">


<TextView
    android:id="@+id/labelMkt1"
    android:layout_width="0dp"
    android:layout_height="30dp"
    android:layout_weight="0.5"
    android:gravity="center_vertical"
    android:text="@string/report_mkt"
    android:textColor="#000"
    android:background="@color/colorPrimaryDark"
    android:textDirection="rtl" />

<TextView
    android:id="@+id/labelMkt2"
    android:layout_width="0dp"
    android:layout_height="30dp"
    android:layout_weight="1"
    android:background="@color/colorAccent"
    android:gravity="center_vertical"
    android:text="@string/device_param_empty"
    android:textDirection="rtl" />

Ресурсы строки:

<resources>
<string name="app_name">My Application</string>
<string name="report_mkt">this is english text</string>
<string name="device_param_empty">this is english text</string>

Как это выглядит на реальном телефоне:

enter image description here

Итак, как вы можете видеть, я тоже получил свои строки на английском, и все работает нормально, поэтому проблема не в том, чтобы иметь английские строки.

...