Два TextViews внутри RelativeLayout с правильным ответом на локаль rtl - PullRequest
0 голосов
/ 10 июля 2019

Как я могу создать 2 TextViews в RelativeLayout, который выглядит так в LTR и RTL локалях.

(Таблица только для того, чтобы прояснить, что я имею в виду, это не часть моего вопроса)

LTR

╔════════════╦═══════════════════════════════════════════════════════════╗
║  txtView1  ║                        txtView2                           ║
╚════════════╩═══════════════════════════════════════════════════════════╝

РТЛ

╔═════════════════════════════════════════════════════════════╦══════════╗
║                           txtView2                          ║ txtView1 ║
╚═════════════════════════════════════════════════════════════╩══════════╝

В настоящее время я использую поля, но это не так:

<RelativeLayout
    android:id="@+id/title_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txtView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView 1"
        android:textColor="?attr/info_color"
        android:textSize="13sp" />

    <TextView
        android:id="@+id/txtView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/txtView1"
        android:text="TextView 2"
        android:layout_marginLeft="60dp"
        android:layout_marginRight="60dp" />

</RelativeLayout>

Я не могу использовать setLayoutDirection, minSdkVersion ниже 17 "

Ответы [ 2 ]

0 голосов
/ 10 июля 2019

Мне кажется, что следующий код работает правильно.

<LinearLayout
        android:layoutDirection="locale"
        android:textDirection="locale" //Works as expected when I set rtl or ltr
        android:layout_width="match_parent" 
        android:layout_height="match_parent">
    <TextView
            android:text="Something"
            android:layout_weight="2"
            android:textDirection="inherit"
            android:layout_width="0dp"
            android:layout_height="wrap_content"/>
    <TextView
            android:text="or the other"
            android:layout_weight="8"
            android:textDirection="inherit"
            android:layout_width="0dp"
            android:layout_height="wrap_content"/>
</LinearLayout>
0 голосов
/ 10 июля 2019

Я не уверен, что это то, что вы хотите, но вы можете:

1 - установите android:layout_width на wrap_content in TextView1.

2 - Выровнять TextView1 к началу родительского

3 - выровнять TextView2 в конце TextView1

<RelativeLayout
    android:id="@+id/title_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/txtView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:text="TextView 1"
        android:textSize="13sp" />

    <TextView
        android:id="@+id/txtView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_alignBaseline="@id/txtView1"
        android:layout_toEndOf="@id/txtView1"
        android:text="TextView 2"/>
</RelativeLayout>

Это результат:

LTR

enter image description here

РТЛ

enter image description here

EDIT

Как уже упоминалось в комментариях, вы можете использовать LinearLayout:

<LinearLayout
    android:id="@+id/title_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:weightSum="1">

    <TextView
        android:id="@+id/txtView1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="TextView 1"
        android:textSize="13sp"
        android:layout_weight="0.2"/>

    <TextView
        android:id="@+id/txtView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_weight="0.8"
        android:layout_alignBaseline="@id/txtView1"
        android:text="TextView 2"/>
</LinearLayout>
...