У меня проблема с ConstraintLayout.
У меня есть представление, которое имеет 3 textviews T1, T2 и T3.
Условие: T1, T2 имеет верхнюю границу 4dp.
Проблема: T3 должен быть сверху, должен быть выровнен по верхнему виду. Состояние T1 будет видимым или исчезнет в зависимости от определенного условия.
Если T1 видим, маргинальная вершина будет 8dp, а когда T1 не видна, у T2 будет 12dp margintop.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="T1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
android:text="T2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView" />
<TextView
android:id="@+id/textView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="T3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/textView" />
</android.support.constraint.ConstraintLayout>
Это возможно с помощью XML или мне нужно настроить программно?
Вы не можете достичь этого только с XML, то, что вы сделали, это создали экран, используя макет ограничения.
Если вы хотите добавить некоторую логику, чтобы изменить положение некоторого представления при определенных условиях, вам придется написать это программно.
Вот хорошая тема на эту тему.
Вы можете использовать layout_goneMarginTop
чтобы иметь другое поле, когда ваш вид GONE
.
Вы также можете использовать SequenceLayout для большей гибкости при управлении макетом. Используйте visibilityElement
для каждого Span
вы хотите пропустить, когда исчезнет ваше связанное представление.
Я точно не знаю ваш вариант использования, но вы можете сделать так, чтобы этот параметр был невидимым, а не пропущенным.
View.GONE Этот вид невидим, и он не занимает места для макета.
View.INVISIBLE Это представление невидимо, но все же занимает место для макета.