Как частично разрешить поддержку LTR, RTL в ConstraintLayout - PullRequest
0 голосов
/ 08 апреля 2020

Так что в моем недавнем интервью меня спросили, что если в ConstraintLayout с несколькими дочерними элементами Views поддерживает часть Views изменения LTR и RTL и часть Views, чтобы игнорировать это. Как и на изображениях ниже:

enter image description here

Как вы можете видеть, синие виды меняют свое направление в зависимости от направления компоновки видов, но красный, зеленый и желтый сохраняют там положение относительно друг друга, но выровняйте их (общий) начало и конец в зависимости от направления компоновки для различных View.

Я понимаю, что вы можете установить синий Views просто используя начало и конец атрибуты вместо левого и правого. Но как вы сохраняете порядок разноцветных Views таким же, но в то же время перемещаете их вместе с другими Views? Убедившись, что нет более глубокой иерархии, чем родительский ConstraintLayout.

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

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Интересный вопрос. Я не знаю ни одного способа указать, что часть макета должна оставаться LTR , когда все остальные части go RTL . Я предполагаю, что вы ищете XML -только решение.

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

<androidx.constraintlayout.widget.ConstraintLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <View
        android:id="@+id/view"
        android:layout_width="100dp"
        android:layout_height="300dp"
        android:layout_marginStart="24dp"
        android:layout_marginTop="24dp"
        android:background="@android:color/darker_gray"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/view2"
        android:layout_width="239dp"
        android:layout_height="75dp"
        android:layout_marginStart="24dp"
        android:layout_marginTop="24dp"
        android:background="@android:color/holo_blue_bright"
        app:layout_constraintStart_toEndOf="@+id/view"
        app:layout_constraintTop_toTopOf="parent" />

    <View
        android:id="@+id/box1"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginTop="24dp"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        android:background="@android:color/holo_orange_light"
        app:layout_constraintRight_toLeftOf="@+id/box2"
        app:layout_constraintLeft_toLeftOf="@+id/view2"
        app:layout_constraintTop_toBottomOf="@+id/view2" />

    <View
        android:id="@+id/box2"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginLeft="24dp"
        android:background="@android:color/holo_red_light"
        app:layout_constraintRight_toLeftOf="@+id/box3"
        app:layout_constraintLeft_toRightOf="@+id/box1"
        app:layout_constraintTop_toTopOf="@+id/box1" />

    <View
        android:id="@+id/box3"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_marginLeft="24dp"
        app:layout_constraintHorizontal_chainStyle="spread_inside"
        android:background="@android:color/holo_green_light"
        app:layout_constraintRight_toRightOf="@id/view2"
        app:layout_constraintLeft_toRightOf="@+id/box2"
        app:layout_constraintTop_toTopOf="@+id/box2" />

</androidx.constraintlayout.widget.ConstraintLayout>

enter image description hereenter image description here

Есть одна хитрость: layout_constraintHorizontal_chainStyle должен быть установлен в первом и последнем виде в горизонтальной цепочке. Также у дизайнера есть тенденция изменять атрибуты left / right обратно на start / end.

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

0 голосов
/ 08 апреля 2020

Сверните многоцветные представления в одном представлении и сделайте это представление родительским для ограничений вашего другого представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...