Как подразделить или нет макет для отображения одной или двух кнопок в зависимости от состояния переключателя? - PullRequest
0 голосов
/ 11 мая 2019

Я разрабатываю экран приложения для Android в Котлине). Я ищу хорошую практику и пример для отображения одной или двух кнопок в зависимости от состояния переключателя.

Если переключатель отключен, я хотел бы отобразить одну кнопку, которая занимает всю ширину экрана (соответствует родительскому элементу). Если переключатель активирован, я бы хотел, чтобы две кнопки отображались в одной строке шириной 50% каждая.

Как настроить такую ​​структуру?

1 Ответ

2 голосов
/ 11 мая 2019

Вы должны использовать ConstraintLayout и match_constraint (0dp) на них обоих, как показано ниже.Обратите внимание на использование стиля цепочки распространения и ограничений.

Установив видимость как GONE для одной кнопки, вы увидите, что другая будет занимать всю ширину.Вы можете проверить это в редакторе макетов, используя альтернативу tools:visibility="gone".

        <Button
            android:id="@+id/buttonLeft"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:text="@string/button_left_text"
            app:layout_constraintEnd_toStartOf="@+id/buttonRight"
            app:layout_constraintHorizontal_chainStyle="spread"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/topElement" />

        <Button
            android:id="@+id/buttonRight"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:layout_marginEnd="8dp"
            android:text="@string/button_right_text"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@+id/buttonLeft"
            app:layout_constraintTop_toBottomOf="@+id/topElement" />
...