GridLayout не заполняет экран

Я пытаюсь использовать Gridlayout. Я хочу, чтобы кнопки моей сетки заполняли экран, но у меня с этим проблемы. Я замечаю, что сам макет заполняет экран, но его дочерние элементы не заполняют макет. Вот результат: http://i.imgur.com/TWNuTaj.png

Я много искал в Интернете, но большинство ответов предлагают заменить GridLayout на LinearLayout или RelativeLayout. Но я должен остаться с GridLayout. Также я не хочу давать кнопкам определенный размер, а лучше останусь со структурой на связанном изображении.

Вот мой код:

    <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="0.5dp"
android:columnCount="4"
android:orientation="horizontal"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:rowCount="5"
tools:context=".Level1" >

<Button
    android:layout_width="0dp"
    android:layout_column="0"
    android:layout_row="0"
    android:text="0" />

<Button
    android:id="@+id/b_1"
    android:layout_column="1"
    android:layout_gravity="fill_horizontal"
    android:layout_row="0"
    android:text="1" />

<Button
    android:id="@+id/b_2"
    android:layout_column="2"
    android:layout_gravity="fill"
    android:layout_row="0"
    android:layout_rowSpan="3"
    android:text="2" />

<Button
    android:id="@+id/b_3"
    android:layout_column="3"
    android:layout_row="0"
    android:text="3" />

<Button
    android:layout_width="0dp"
    android:layout_column="0"
    android:layout_row="1"
    android:text="0" />

<Button
    android:id="@+id/b_4"
    android:layout_column="1"
    android:layout_gravity="fill_vertical"
    android:layout_row="1"
    android:layout_rowSpan="3"
    android:text="4" />

<Button
    android:id="@+id/b_6"
    android:layout_column="3"
    android:layout_gravity="fill_vertical"
    android:layout_row="1"
    android:layout_rowSpan="3"
    android:text="6" />

<Button
    android:layout_width="0dp"
    android:layout_column="0"
    android:layout_row="2"
    android:text="0" />

<Button
    android:id="@+id/b_5"
    android:layout_column="2"
    android:layout_row="3"
    android:text="5" />

<Button
    android:layout_width="0dp"
    android:layout_column="0"
    android:layout_row="3"
    android:text="0" />

<Button
    android:layout_height="0dp"
    android:layout_column="0"
    android:layout_columnSpan="4"
    android:layout_row="4"
    android:text="0" />

</GridLayout>

person user2983212    schedule 11.10.2014    source источник


Ответы (2)


Попробуйте этот способ, надеюсь, это поможет вам решить вашу проблему.

GridLayout : "GridLayout не поддерживает принцип веса, поскольку В общем, поэтому невозможно настроить GridLayout для распределения избыточного пространства в нетривиальных пропорциях между несколькими строками или столбцами... Для полного контроля над распределением избыточного пространства в строке или столбце используйте подпредставление LinearLayout. для хранения компонентов в связанной группе ячеек».

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">
        <Button
            android:layout_width="match_parent"
            android:layout_weight="0.20"
            android:layout_height="0dp"
            android:text="1" />

        <Button
            android:layout_width="match_parent"
            android:layout_weight="0.80"
            android:layout_height="0dp"
            android:text="4" />

    </LinearLayout>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">
        <Button
            android:layout_width="match_parent"
            android:layout_weight="0.80"
            android:layout_height="0dp"
            android:text="2" />

        <Button
            android:layout_width="match_parent"
            android:layout_weight="0.20"
            android:layout_height="0dp"
            android:text="5" />

    </LinearLayout>
    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">
        <Button
            android:layout_width="match_parent"
            android:layout_weight="0.20"
            android:layout_height="0dp"
            android:text="3" />

        <Button
            android:layout_width="match_parent"
            android:layout_weight="0.80"
            android:layout_height="0dp"
            android:text="6" />
    </LinearLayout>
</LinearLayout>
person Haresh Chhelana    schedule 11.10.2014
comment
Прежде всего, большое спасибо за ваши усилия, я очень ценю это. Но, к сожалению, как я уже сказал, я должен использовать GridLayout /: - person user2983212; 11.10.2014

Основываясь на предыдущем ответе @Haresh Chhelana, он работал так, просто поделившись своим решением:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/bg_1">

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <!-- position 1 -->
        <ImageView
            android:layout_width="match_parent"
            android:layout_weight="0.50"
            android:layout_height="0dp"
            android:src="@drawable/bt_elsa" />

        <!-- position 3 -->
        <ImageView
            android:layout_width="match_parent"
            android:layout_weight="0.50"
            android:layout_height="0dp"
            android:src="@drawable/bt_daniel" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <!-- position 2 -->
        <ImageView
            android:layout_width="match_parent"
            android:layout_weight="0.50"
            android:layout_height="0dp"
            android:src="@drawable/bt_anna" />

        <!-- position 4 -->
        <ImageView
            android:layout_width="match_parent"
            android:layout_weight="0.50"
            android:layout_height="0dp"
            android:src="@drawable/bt_elmo" />

    </LinearLayout>
</LinearLayout>

Источник пример: https://github.com/eduardocerqueira/sing

person Eduardo Cerqueira    schedule 03.01.2016