У меня есть, как мне кажется, довольно распространенный вариант использования: у меня несколько строк информации на экране.Я надеюсь реализовать эти представления без необходимости использовать вложенные ViewGroups.Каждая строка должна иметь минимальную высоту, но расширяться, если содержимое больше минимальной высоты.Содержимое должно быть вложено вертикально.
Кажется, что этот упрощенный пример должен работать:
<?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"
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:text="Row"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/view"
app:layout_constraintBottom_toBottomOf="@+id/view"/>
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:background="#8800ff00"
app:layout_constraintHeight_min="100dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/textView"/>
</android.support.constraint.ConstraintLayout>
Вместо создания ViewGroup для каждой строки, у меня есть плоский макет с ограничениями.Вид для каждой строки устанавливает высоту строки и может быть активным.Представления внутри строки являются родственными элементами в иерархии макета, но центрируются вертикально в середине представления для этой строки.Поскольку я указал app:layout_constraintHeight_min
и привязал нижнюю часть представления к нижней части содержимого, оно должно расти вместе с содержимым.
Но есть проблема:
![enter image description here](https://i.stack.imgur.com/VRiaD.png)
ConstraintLayout добавляет нежелательный интервал над строкой!Обратите внимание, что нежелательный интервал над строкой равен правильному интервалу между нижней частью содержимого и нижней частью строки.
Моя теория такова: поскольку нижняя часть представления привязана к нижней части содержимого(TextView) он хочет придерживаться этого и быть рядом с ним.Если я заставляю его двигаться дальше, для этого добавляется что-то вроде нижнего поля, добавляется аналогичное верхнее поле, чтобы оно было симметричным.
Как мне остановить его?Если бы не этот нежелательный интервал сверху, у меня было бы именно то, что мне нужно.Возможно, есть какой-то особый трюк с ConstraintLayout, какой-то магический атрибут, чтобы исправить это поведение.Или, может быть, есть совершенно другой способ использования ConstraintLayout для создания нужного мне пользовательского интерфейса.
Я понимаю, что использование строк фиксированной высоты сделало бы это намного проще, но мне не нравится делать это, если содержимое может расти.
Я мог бы изменить свой пользовательский интерфейс, чтобы иметь вложенный ConstraintLayout для каждой строки, но я бы предпочел не делать этого после такой сложной работы, чтобы сделать сложный макет полностью плоским, без нескольких слоев ViewGroups.Но это то, что я сделаю, если не смогу найти лучшего решения, которое я надеюсь найти здесь.