Android GridLayout - XML - 列不成比例

时间:2014-04-10 09:36:58

标签: android xml grid-layout

我正在尝试在第一行创建一个如下所示的按钮布局:

[  1 ][2][3]

按钮1应占据2列,并且是按钮2和3的宽度的两倍。按钮2和3应该是相同的宽度(1列宽)。

然而,我所看到的是:

[1][2][       3       ]

有人可以告诉我为什么按钮3完全填满屏幕的其余部分以及为什么这些按钮似乎不符合layout_column_span规则?

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:layout_margin="0dp"
    android:adjustViewBounds="true"
    android:alignmentMode="alignMargins"
    android:clipToPadding="false"
    android:columnCount="4"
    android:fitsSystemWindows="false"
    android:layoutMode="clipBounds"
    android:orientation="horizontal"
    android:padding="0dp"
    android:rowCount="6"
    android:useDefaultMargins="true" >

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="fill"
            android:layout_weight="1"
            android:layout_margin="0dp"
            android:background="#ff0000"
            android:layout_row="0"
            android:layout_column="0"
            android:layout_columnSpan="2"
            android:layout_rowSpan="2"            
            android:text="1" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="fill"
            android:layout_weight="1"
            android:layout_margin="0dp"
            android:background="#ffff00"
            android:layout_row="0"
            android:layout_column="2"
            android:layout_columnSpan="1"
            android:layout_rowSpan="2"            
            android:text="2" />

       <Button
           android:id="@+id/button3"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_column="3"
           android:layout_columnSpan="1"
           android:layout_gravity="fill"
           android:layout_margin="0dp"
           android:layout_row="0"
           android:layout_rowSpan="2"
           android:layout_weight="1"
           android:background="#00ff00"
           android:text="3" />


</GridLayout>

2 个答案:

答案 0 :(得分:0)

 Check this may help you
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/favorites_grid"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:columnCount="1"
android:rowCount="2"
>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_column="0"
    android:layout_gravity="left|top"
    android:layout_row="0"
    android:orientation="horizontal"
    android:weightSum="4" >

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
         android:text="Cell 1" 
        android:textSize="14dip" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Cell 2" />

    <Button
         android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Cell 3" 
        android:textSize="14dip" />
</LinearLayout>

答案 1 :(得分:0)

根据this post,在GridLayout上以非平凡的方式安排空间时存在一些限制。您可以尝试其他方法,也可以为每行使用LinearLayout,这样您就可以控制其子Views的权重。

以下是您案例的示例:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="1" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:weightSum="4" >

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="2"
        android:singleLine="true"
        android:text="Button 1" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:singleLine="true"
        android:text="Button 2" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_weight="1"
        android:singleLine="true"
        android:text="Button 3" />
</LinearLayout>

希望能帮到你。