在RTL OS中LTR文本开始时呈现的标点符号

时间:2018-11-14 10:52:44

标签: android android-layout textview right-to-left text-alignment

考虑代码段:

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

代码显示的结果为“!Hello”,而不是预期的“ Hello!”当OS语言设置为RTL时。 仅在将textDirection设置为“ locale”时才能观察到此情况,否则,文本将正确显示。

我需要将TextDirection设置为语言环境,以便根据OS语言环境在textview中对齐文本。 有没有一种方法可以将文本方向用作语言环境而不会弄乱文本呈现或任何其他简单的解决方案来实现相同的效果。

PS:我希望在全局级别将其应用于所有textview,因此不能使用textAlignment(作为viewStart),因为那样会干扰在View上设置的gravity属性。 (具体来说,由于设置了textalignment = viewStart,将忽略重力设置为中心水平线)

1 个答案:

答案 0 :(得分:0)

"locale"没什么特别的,当您使用"rtl"进行LTR文本以 ! 结尾的字段的textDirection时,会出现相同的显示。或 . ,或其他没有强方向性的标点符号。

可以做什么:

  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"
    />