7

我们正在编写一个针对 ICS+ 的应用程序,并相信 GridLayout 是最好的布局范例,但似乎很少有人写过它,而且我们遇到了一些对齐问题。

<GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/row_background"
    android:rowCount="1"
    android:columnCount="3"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:useDefaultMargins="true"
    android:background="@drawable/list_item_bg">

    <ImageView
        android:id="@+id/visibilityIcon"
        android:layout_row="0"
        android:layout_column="0"
        android:src="@drawable/visibility_icon" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>

    <ImageView
        android:id="@+id/windIcon"
        android:layout_row="0"
        android:layout_column="1"
        android:src="@drawable/wind_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>

    <ImageView
        android:id="@+id/crosswindIcon"
        android:layout_row="0"
        android:layout_column="2"
        android:src="@drawable/cloud_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>

</GridLayout>

但是,左边的 2 个图标保持左对齐,最右边的图标以剩余空间居中。

本质上,我们需要做的是将每列的大小指定为总屏幕大小的 1/3(因为 3 列)。我认为这是 GridLayout 所做的,但似乎 'wrap_content' 会导致这种行为(有道理),但 'match_parent' 会导致第一列填满整个屏幕,而不是填充其单元格,这是我所期望的行为。

我们似乎已经尝试了重力、layout_gravity 等的所有组合,但要么我们根本上做错了,要么发现了 GridLayout 的限制。

谢谢你的帮助!

4

1 回答 1

8

GridLayout 中只允许增长一行一列,即沿该轴具有重力的那一列。如果不止一行或一列指定重力,只有一个会得到它(如果我记得它是“最后一个”)。选择其他布局或编写自己的布局。如果您只想要一行具有等分图标的行,您可以使用 LinearLayout ,其中组件的宽度为 0px 且权重都相同,例如 1。

于 2012-09-11T22:58:40.967 回答