LinearLayout не показывает всех своих детей - PullRequest
0 голосов
/ 11 января 2019

После создания LinearLayout с ImageView s в качестве дочерних элементов я заметил, что отображается только первый ряд элементов. Я думал, что LinearLayout будет автоматически переносить своих детей на новую строку по мере необходимости? Ширина кажется хорошей, но не высотой.

Ожидаемый результат

enter image description here

Ожидаемый проект (ImageView количество не в масштабе)

enter image description here По какой-то причине, когда я создаю LinearLayout внутри другого представления, ширина отображается правильно, но кажется, что она никогда не регулирует свою высоту, чтобы соответствовать и показывать все дочерние элементы внутри нее.

Текущий результат

enter image description here

<androidx.cardview.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/cv_facilities">

    <LinearLayout
        android:id="@+id/ll_facilities"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="10dp">

        <LinearLayout
            android:id="@+id/ll_titlerow"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/iv_expandcollapsearrow"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="10dp" />

            <ImageView
                android:id="@+id/iv_topicsymbol"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginEnd="10dp" />

            <LinearLayout
                android:id="@+id/ll_symbols"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal">
                <ImageView
                    android:id="@+id/iv_symbol_a"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_language" />

                <ImageView
                    android:id="@+id/iv_symbol_b"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_pets" />

                <ImageView
                    android:id="@+id/iv_symbol_c"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_verified_user" />

                <ImageView
                    android:id="@+id/iv_symbol_d"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_transport" />

                <ImageView
                    android:id="@+id/iv_symbol_e"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_seat" />

                <ImageView
                    android:id="@+id/iv_symbol_f"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_fingerprint" />

                <ImageView
                    android:id="@+id/iv_symbol_g"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_areoplane_depart" />

                <ImageView
                    android:id="@+id/iv_symbol_h"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:src="@drawable/ic_areoplane_arrive" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</androidx.cardview.widget.CardView>

Ответы [ 3 ]

0 голосов
/ 11 января 2019

Не делайте горизонтальный линейный макет с 6 imageView

Создайте новый вертикальный линейный макет и нанесите на него два горизонтальных линейных макета для каждого 3 imageView.

0 голосов
/ 11 января 2019

Это поведение LinearLayout "как и было задумано": его дочерние элементы будут отображаться в горизонтальной или вертикальной линии.

Так как все дочерние элементы View в вашем проекте имеют одинаковый размер, рассмотрите возможность переключения на GridLayout, он доступен в виде библиотеки androidx (например, androidx.gridlayout: gridlayout: 1.0. 0 ).

Для детей View с различными размерами, FlexboxLayout является хорошей альтернативой. Он был представлен в блоге в феврале 2017 года. Доступна версия для androidx: 'com.google.android: flexbox: 1.1.0'

0 голосов
/ 11 января 2019

Горизонтальный LinearLayout не будет автоматически переноситься на вторую строку, чтобы соответствовать его дочерним элементам. Согласно документации Android он поддерживает только одно направление:

LinearLayout - это группа представлений, которая выравнивает все дочерние элементы в одном направление, вертикально или горизонтально

То, что вы можете сделать, это использовать flexbox-layout для достижения режима обтекания.

...