Android GridLayout内部的水平居中视图

时间:2012-09-11 22:51:26

标签: android alignment android-4.0-ice-cream-sandwich grid-layout xml-layout

我们正在编写一个针对ICS +的应用,并认为Gr​​idLayout是最好的布局范例,但似乎很少有关于它的文章,我们遇到了一些对齐问题。

<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的限制。

感谢您的帮助!

1 个答案:

答案 0 :(得分:8)

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