其为4.0之后新添的布局,support-v7包中也有。
与LinearLayout类似,它也需要指定方向,默认是水平,并且用的属性也与LinearLayout一样。水平时,其子View会按水平排列。垂直也类似。
可以使用属性android:columnCount与android:rowCount指定行数和列数,如果想要某个子View显示在固定的行和列,通过layout_column与android:layout_row进行设置,注意这两个值都是从0开始的。如果当前行或者列,放不下要添加的子View,就会自动换行或者换行。默认时,其子控件都是宽高都是wrap_content。
如果想要设置某个子View横跨多个行和列,可以通过layout_rowSpan与layout_columnSpan进行设置。
GridLayout有一个很不方便的地方,每一行的子view进行平分很麻烦。在api21和新版的support-v7中可以通过新添加的layout_columnWeight进行平分。同时还要指定layout_gravity=fill
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:columnCount="4" android:orientation="horizontal" android:padding="10dip" > <TextView android:text="@string/grid_layout_1_instructions" /> <EditText android:layout_column="0" android:layout_columnSpan="4" android:layout_gravity="fill_horizontal" /> <Button android:layout_column="2" android:text="@string/grid_layout_1_cancel" /> <Button android:layout_marginLeft="10dip" android:text="@string/grid_layout_1_ok" /> </GridLayout>效果为:
<android.support.v7.widget.GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:demo="http://schemas.android.com/apk/res/com.baigle.viewdemo" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" demo:columnCount="4" demo:orientation="horizontal" demo:rowCount="5" > <Button android:id="@+id/one" android:layout_width="0dp" demo:layout_columnWeight="1" demo:layout_gravity="fill" android:text="1" /> <Button android:id="@+id/two" android:layout_width="0dp" demo:layout_columnWeight="1" demo:layout_gravity="fill" android:text="2" /> <Button android:id="@+id/three" android:layout_width="0dp" demo:layout_columnWeight="1" demo:layout_gravity="fill" android:text="3" /> <Button android:id="@+id/devide" android:layout_width="0dp" demo:layout_columnWeight="1" demo:layout_gravity="fill" android:text="/" /> <Button android:id="@+id/zero" android:layout_width="0dp" demo:layout_columnSpan="2" demo:layout_columnWeight="1" demo:layout_gravity="fill" android:text="0" /> <Button android:id="@+id/point" android:layout_width="0dp" demo:layout_columnWeight="1" demo:layout_gravity="fill" android:text="." /> <Button android:id="@+id/plus" android:layout_width="0dp" demo:layout_columnWeight="1" demo:layout_gravity="fill" demo:layout_rowSpan="2" android:text="+" /> <Button android:id="@+id/equal" android:layout_width="0dp" demo:layout_columnSpan="3" demo:layout_columnWeight="1" demo:layout_gravity="fill" android:text="=" /> </android.support.v7.widget.GridLayout>
android:layout_width="0dp" demo:layout_columnWeight="1" demo:layout_gravity="fill"