Как получить веса LinearLayout в ConstraintLayout? - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть следующий макет, и я хотел бы иметь такое же поведение, как weightSum и weight в LinearLayout

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto">

    <LinearLayout
            android:id="@+id/linear_layout_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_marginStart="10dp"
            android:layout_marginTop="10dp"
            android:background="#a4c639"
            android:thelayout_constraintHorizontal_weight="5"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"
    >
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Title"
        />

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Main information"
        />
    </LinearLayout>



    <LinearLayout
            android:id="@+id/linear_layout_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:background="#a4c639"
            android:thelayout_constraintHorizontal_weight="5"

            android:layout_marginStart="10dp"
            app:layout_constraintTop_toTopOf="@id/linear_layout_1"
            app:layout_constraintStart_toEndOf="@id/linear_layout_1"
            app:layout_constraintTop_toBottomOf="@id/linear_layout_1"
    >
        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Title"
        />

        <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="foo"
        />
    </LinearLayout>

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Bar"
            android:thelayout_constraintHorizontal_weight="5"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toEndOf="@id/linear_layout_2"
            app:layout_constraintTop_toTopOf="@id/linear_layout_2"
            app:layout_constraintBottom_toBottomOf="@id/linear_layout_2"
            android:background="#a4c639"
    />

</android.support.constraint.ConstraintLayout>  

Вот как это выглядит:
enter image description here

Я бы хотел, чтобы все 3 виджета занимали по 1/3 пространства каждый. Как я могу это сделать?

1 Ответ

2 голосов
/ 11 апреля 2019

Чтобы использовать веса с ConstraintLayout, вы должны убедиться, что все виды, которые вы хотите, взвешены, образуют цепочку .В этом случае мы будем иметь дело с горизонтальной цепочкой , что означает, что начало + конец (или левый + правый) каждого представления должны быть ограничены его соседями или родителем.

Например:

<View
    android:id="@+id/first"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toStartOf="@id/second"
    .../>

<View
    android:id="@+id/second"
    app:layout_constraintStart_toEndOf="@id/first"
    app:layout_constraintEnd_toStartOf="@id/third"
    .../>

<View
    android:id="@+id/third"
    app:layout_constraintStart_toEndOf="@id/second"
    app:layout_constraintEnd_toEndOf="parent"
    .../>

Если вы хотите, чтобы представления распределялись равномерно, то вы должны использовать MATCH_CONSTRAINTS (0dp) для ширины каждого вида:

<View
    android:id="@+id/first"
    android:layout_width="0dp"
    .../>

<View
    android:id="@+id/second"
    android:layout_width="0dp"
    .../>

<View
    android:id="@+id/third"
    android:layout_width="0dp"
    .../>

Если вы хотите изменить способ взвешивания видов, вы должны указать вес для каждого вида (в дополнение к установке ширины 0dp).Здесь средний вид будет в два раза больше двух боковых:

<View
    android:id="@+id/first"
    app:layout_constraintHorizontal_weight="1"
    .../>

<View
    android:id="@+id/second"
    app:layout_constraintHorizontal_weight="2"
    .../>

<View
    android:id="@+id/third"
    app:layout_constraintHorizontal_weight="1"
    .../>
...