Как установить равную ширину дочерних элементов GridLayout и сделать их равномерно распределенными?

У меня есть GridLayout с 3 ImageView в качестве детей. Для columnCount установлено значение 3, и они должны быть равномерно распределены по горизонтали. Это XML:

    <GridLayout
        android:id = "@+id/info_contact_layout"
        android:layout_width = "match_parent"
        android:layout_height = "match_parent"
        android:orientation = "horizontal"
        android:columnCount = "3"
        android:rowCount = "1">

        <ImageView
            android:id = "@+id/info_empresa_facebook_contact_id"
            android:layout_gravity = "fill"
            android:layout_columnWeight = "1"
            android:src = "@drawable/ic_warning" />

        <ImageView
            android:id = "@+id/info_empresa_whatsapp_contact_id"
            android:layout_gravity = "fill"
            android:layout_columnWeight = "1"
            android:src = "@drawable/ic_warning" />

        <ImageView
            android:id = "@+id/info_empresa_call_id"
            android:layout_gravity = "fill"
            android:layout_columnWeight = "1"
            android:src = "@drawable/ic_warning" />

    </GridLayout>

Вместо трех изображений одинаковой ширины, идеально вписывающихся в горизонтальное пространство, я получаю следующее (первое изображение огромно, а другие не видны):

Как установить равную ширину дочерних элементов GridLayout и сделать их равномерно распределенными?

Как я могу равномерно распределить содержимое сетки по горизонтали? Есть 3 столбца, по одному для каждого изображения, а ширина сетки соответствует ширине родительской. Кроме того, это не сработает, если я сниму веса. Размер изображений не имеет значения, они должны соответствовать сетке.

0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваш GridView, как было опубликовано, имеет только одну строку. В этом случае я бы просто использовал LinearLayout:

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

    <ImageView
        android:id = "@+id/info_empresa_facebook_contact_id"
        android:layout_width = "0dp"
        android:layout_height = "wrap_content"
        android:layout_weight = "1"
        android:src = "@drawable/ic_warning" />

    <ImageView
        android:id = "@+id/info_empresa_whatsapp_contact_id"
        android:layout_width = "0dp"
        android:layout_height = "wrap_content"
        android:layout_weight = "1"
        android:src = "@drawable/ic_warning" />

    <ImageView
        android:id = "@+id/info_empresa_call_id"
        android:layout_width = "0dp"
        android:layout_height = "wrap_content"
        android:layout_weight = "1"
        android:src = "@drawable/ic_warning" />

</LinearLayout>

Это именно то, что я хотел, спасибо. Я не использовал LinearLayout, потому что думал, что Grid даст мне это (я имею в виду, что по определению размер его дочерних элементов не устанавливается вручную). Мне все еще любопытно, как это сделать с помощью GridLayout.

Ericson Willians 02.05.2018 01:07

@EricsonWillians По моему личному опыту, использование GridView всегда неудобно, и почти все было бы лучше (стопка LinearLayout, FlexboxLayout, ConstraintLayout и т. д.).

Ben P. 02.05.2018 01:10

Другие вопросы по теме