Я не уверен на 100%, что понимаю, что вы пытаетесь выполнить, но я буду расширять (уже даны ответы) для каждого случая, который я могу себе представить:
| V1 | V2 | V3 ...... |
вам просто нужнопередайте 3-му виду match_constraints
с android:layout_width="0dp"
, и он будет занимать все пространство, оставленное другими видами (которые имеют обтекание).
Это даст тот же результат, который я понимаю здесь:
|view1 view2 view3 --empty-space--|
Если только -- empty space --
вы не имели в виду |V1|V2|V3| ..... |
, в этом случае вам понадобитсяСхема ограничения Chain
и bias
:
В крайнем левом представлении добавьте:
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintHorizontal_chainStyle="packed"
и убедитесь, что все виды имеют связь между ними, например, view1 (крайний левый)будет иметь: startToStart = parent, endToStart = view2.В этом случае View2 будет иметь startToEnd = view1, endToStart = view3 и view3 ... startToEnd = view2, endToEnd = parent
Вы поймете идею.
Это упакует все представления в start
оставляя пустое место в конце.Вышеуказанное будет работать независимо от ограничений родителя (сопоставление / перенос), поскольку движок в любом случае будет позиционировать / отображать размеры в зависимости от доступного пространства.
Теперь для вашего примера MATCH_PARENT:
|view1 view2 --empty-space-- view3|
Неясно (для меня), что вы подразумеваете под - пустое пространство - означает ли это, что вы хотите, чтобы view2
обернул его содержимое?или вы хотите, чтобы view2 использовал все доступное пространство и выдвинул view3 до конца?
Я предполагаю, что вы имеете в виду, что все представления обертываются и в них есть свободное место.Есть хороший ответ о том, как этого добиться (подсказка, что вам нужно расположить цепочку в промежутке между ними), если вы не знаете точных размеров, потому что движок не сможет определить, сколько места будет занимать каждое представление.прежде чем рассчитать размеры и обернуть их.
Теперь, если вы не возражаете против того, чтобы view2 занял все оставшееся пространство и разорвал цепочку (только при необходимости), вы можете сделать обычную смещенную цепочку, но использовать условие распространения по умолчанию для переноса:
И так это будет выглядеть так:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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/view1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/view2"
app:layout_constraintTop_toTopOf="parent"
android:text="view1"/>
<TextView
android:id="@+id/view2"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toEndOf="@id/view1"
app:layout_constraintEnd_toStartOf="@id/view3"
app:layout_constraintWidth_default="spread"
android:text="view2"/>
<TextView
android:id="@+id/view3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toEndOf="@id/view2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
android:text="view3"/>
</androidx.constraintlayout.widget.ConstraintLayout>
И это будет производить что-то вроде:
| V1 | V2.............|V3|
Что может или не может работать для вас.