Подтвердить что ты не робот

Целесообразно ли использовать LinearLayout внутри ConstraintLayout в Android?

Я новичок в ConstraintLayout в Android и новичок на Android. У меня есть вопрос. Целесообразно использовать LinearLayout внутри ConstraintLayout? Например:

<?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"
    app:srcCompat="@drawable/landing_screen"
    android:layout_height="match_parent"
    tools:context="com.braigolabs.braigo.landing.LandingActivity">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:scaleType="centerCrop"
        app:srcCompat="@drawable/landing_screen"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintVertical_bias="1.0"
        app:layout_constraintHorizontal_bias="1.0"
        tools:layout_constraintTop_creator="1"
        tools:layout_constraintRight_creator="1"
        tools:layout_constraintBottom_creator="1"
        tools:layout_constraintLeft_creator="1"/>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        tools:layout_editor_absoluteX="0dp"
        tools:layout_editor_absoluteY="51dp">

        <TextView
            android:id="@+id/textView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="66dp"
            android:layout_marginStart="66dp"
            android:gravity="center"
            android:text="@string/login_welcome_braigolabs"                android:textAppearance="@style/TextAppearance.AppCompat.Large"
            tools:layout_editor_absoluteX="93dp"
            tools:layout_editor_absoluteY="403dp"/>

        <Button
            android:id="@+id/login_button"
            style="@style/Widget.AppCompat.Button.Colored"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:elevation="2dp"
            android:text="@string/login_login_button_title"
            android:textAllCaps="false"
            tools:layout_editor_absoluteX="116dp"
            tools:layout_editor_absoluteY="543dp"/>
    </LinearLayout>
</android.support.constraint.ConstraintLayout>

Также интересно узнать, насколько популярным является ConstraintLayout среди разработчиков?

4b9b3361

Ответ 1

Можно ли использовать LinearLayout внутри ConstraintLayout?

Нет... обычно.

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

Однако есть некоторые вещи, которые LinearLayout может сделать, что ConstraintLayout не может (в основном, вращаться вокруг взвешенного расстояния между представлениями), и поэтому, если вам нужны эти конкретные угловые случаи в вашем макете, t есть какой-либо другой вариант, кроме возврата к LinearLayout.

Насколько популярным является ConstraintLayout среди разработчиков?

ConstraintLayout является относительно новым, но он достаточно мощный и, конечно же, что-то, что вам следует ознакомиться. Это не всегда будет идеальным инструментом для работы, но это часто позволит вам легко создавать макеты, которые вы могли бы потратить на часы.

Я не могу говорить с широко распространенной статистикой усыновления, но могу сказать, что я видел множество вопросов на этом сайте о правильном использовании ConstraintLayout, поэтому разработчики со всего мира начинают работать с ним.

Ответ 2

Начиная с версии 2.0.0-alpha5 библиотеки constraintlayout теперь стало возможным объявить виртуальный элемент макета Flow в вашем ConstraintLayout который (как следует из названия) определяет, как выбранные элементы должны проходить (например, вертикально, горизонтально) в ConstraintLayout. Поэтому больше нет необходимости объявлять LinearLayout в вашем ConstraintLayout.

Например, если вы хотите, чтобы элементы в вашем ConstraintLayout вертикально, вы должны сделать это так:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:ignore="MissingConstraints">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="I am the first TextView" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="I am the second TextView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="I am the third TextView" />

    <androidx.constraintlayout.helper.widget.Flow
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:constraint_referenced_ids="textView1,textView2,textView3"
        app:flow_horizontalAlign="start"
        app:flow_horizontalStyle="packed"
        app:flow_maxElementsWrap="1"
        app:flow_verticalAlign="top"
        app:flow_verticalStyle="packed"
        app:flow_wrapMode="chain"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Вы можете поиграться с атрибутами app:flow_ в элементе Flow чтобы добиться другого поведения потока. Для получения дополнительной информации об элементе Flow см. Примечания к выпуску здесь.