Android RTL направление текста - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь поддерживать RTL-локали в своем приложении, но столкнулся со следующей проблемой.Теперь я говорю «проблема», но это может даже не быть проблемой из-за моего незнакомства с языками RTL, так что вот так

Ниже представлены 3 вида текста.Обратите внимание, что следующие выходы были сделаны с принудительным включением RTL через опцию dev.

Test In English LTR

enter image description here

Тест на английском языке RTL Принудительный

enter image description here

Мне показалось странным, что он не выровнялся вправо, хотяЯ сказал android:gravity="start", например, как это работает с отступами, полями и т. Д., Поэтому я посмотрел на другие ответы и наткнулся на android:textDirection="locale".

Тест на английском языке RTL Принудительное использование языкового языкового стандарта

enter image description here

Теперь это правильно отражает как на LTR, так и на RTL, но затем я заметил следующее поведение с пунктуацией.Это подняло бровь, является ли это правильным, потому что я сравнивал с Google Play Store, Facebook и Whats App с принудительной RTL, и я не видел этого при просмотре абзацев с пунктуацией, что заставляет меня поверить, что я сделал что-то не так.

Полный код макета

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="start"
        android:text="@string/test_one"
        android:textColor="@android:color/black"
        android:textDirection="locale"
        android:textSize="24sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="start"
        android:text="@string/test_two"
        android:textColor="@android:color/black"
        android:textDirection="locale"
        android:textSize="24sp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:gravity="start"
        android:text="@string/test_three"
        android:textColor="@android:color/black"
        android:textDirection="locale"
        android:textSize="24sp" />

</LinearLayout>

Другой код

В моем файле манифеста установлено следующее

 android:supportsRtl="true"

А это мои строки

<string name="test_one">Good Job. You did well!</string>
<string name="test_two">3 hours ago</string>
<string name="test_three">Select Option:</string>

Пожалуйста, прости, как наивно это может звучать, и просвети меня!Я хочу обеспечить удобную поддержку RTL!

1 Ответ

0 голосов
/ 26 сентября 2018

Добавление android:textDirection="locale" к TextView и android:supportsRtl="true" поможет.Тем не менее, textDirection="locale" меняет направление в соответствии с локалью, которая равна en или fa или ar.( Зависит от языка устройства )

И чтобы быть достаточно понятным, работает правильно , потому что текст, который есть в TextView,LTR и вы использовали направление RTL, которое, как вы можете видеть, указало направление RTL, и с этим проблем нет.Кроме того, использование android:gravity="start", вероятно, заставит его использовать с самого начала, которое, я полагаю, начнется с LTR.(Я бы предложил удалить android:gravity="start" и позволить Android (в зависимости от языка устройства) решить, какой из них лучше)

Итак, чтобы проверить, работает он или нет, вы можете установить текст наАрабский или персидский язык выглядит следующим образом:

android:text="این یک تست است"

Если он начался с RTL и с "این", значит, он работает как положено.

...