概述
一个将子view置于矩形网格的布局
网格有一组无限细线组成,将可视区域分为单元格。
子view占据一个或者多个连续的单元格,它们由rowSpec和columnSpec布局参数定义。
虽然单元格在GridLayout中通常不会重叠,但是GridLayout并不会阻止被定义的子元素占用相同的单元格或单元格组,所以在这种操作下,子view很可能重叠。
如果一个子View没有指定希望占据的单元格行和列,GridLayout会自动分配:使用的属性:
orientation,rowCount,columnCount
空间
子view之间的空间可以由使用专用的实例来指定Space视图或者通过设置LeftMargin,topMargin,rightMargin和bottomMargin。当设置useDefaultMargins属性的时候,将根据平台的主要UI风格自动分配子View周围的默认边距。
XML属性
行和列规范的对齐属性一起指定了单元格组中对齐的两个方面。也可以通过使用该setGravity(int) 方法在其单元组中指定子对齐。
重量属性也包含在Spec中,并指定了由于关联视图而导致的任何多余空间的比例。
android:alignmentMode:
取值:
alignBounds:对齐子视图边界
alignMargins:对齐子视图边距
android:columnCount: 最大列数
android:rowCount:最大行数
android:columnOrderPreserved:
当设置为true,使列边界显示的顺序和列索引的顺序相同,默认true
android:orientation:
子元素的布局方向
取值:
horizontal:水平
vertical:垂直
android:rowOrderPreserved:
当设置为true,使行边界显示的顺序和列索引的顺序相同,默认true
android:useDefaultMargins:
当设置为true,而且没有指定视图的布局参数的时候,告诉GirdLayout使用默认的边距。默认值是false
这些是GirdLayout布局本身的属性
下面是GridLayout布局中国元素所支持的属性,定义在GridLayout.LayoutParams中
android:layout_column:显示该空间的列
例如,android:layout_column=”0”,表示在第1列显示该控件;android:layout_column=”1”,表示在第2列显示该控件。
android:layout_columnSpan:
该空间所占的列数
例如,android:layout_columnSpan=”2”,表示该控件占2列。如果要不显示空白,需要设置android:layout_gravity属性
android:layout_columnWeight:
设施权重,在空间分配过剩的时候,给视图分配水平空间的相对比例。
android:layout_row和android:layout_rowSpan和android:layout_rowWeight跟上面差不多
android:layout_gravity:
该控件的布局方式。可以取以下值:
top – 控件置于容器顶部,不改变控件的大小。
bottom – 控件置于容器底部,不改变控件的大小。
left – 控件置于容器左边,不改变控件的大小。
right – 控件置于容器右边,不改变控件的大小。
center_vertical – 控件置于容器竖直方向中间,不改变控件的大小。
fill_vertical – 如果需要,则往竖直方向延伸该控件。
center_horizontal – 控件置于容器水平方向中间,不改变控件的大小。
fill_horizontal – 如果需要,则往水平方向延伸该控件。
center – 控件置于容器中间,不改变控件的大小。
fill – 如果需要,则往水平、竖直方向延伸该控件。
clip_vertical – 垂直剪切,剪切的方向基于该控件的top/bottom布局属性。若该控件的gravity是竖直的:若它的gravity是top的话,则剪切该控件的底部;若该控件的gravity是bottom的,则剪切该控件的顶部。
clip_horizontal – 水平剪切,剪切的方向基于该控件的left/right布局属性。若该控件的gravity是水平的:若它的gravity是left的话,则剪切该控件的右边;若该控件的gravity是 right的,则剪切该控件的左边。
start – 控件置于容器的起始处,不改变控件的大小。
end – 控件置于容器的结束处,不改变控件的大小。
对应函数: setGravity(int)
应用实例:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="vivian.com.calculator.MainActivity"
android:background="#e5e5e5e5"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical"
>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/biaodashi"
android:textSize="24sp"
/>
</LinearLayout>
<GridLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="2"
android:columnCount="4"
android:orientation="horizontal"
android:rowCount="5"
>
<Button
android:id="@+id/qingchu"
android:text="C"
android:textSize="20sp"
android:textColor="#FFF"
android:background="#91919191"
android:layout_rowWeight="1"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/chu"
android:text="÷"
android:textSize="20sp"
android:textColor="#FFF"
android:background="#91919191"
android:layout_rowWeight="1"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/cheng"
android:text="X"
android:textSize="20sp"
android:textColor="#FFF"
android:background="#91919191"
android:layout_rowWeight="1"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/shanchu"
android:text="BACK"
android:textSize="20sp"
android:textColor="#FFF"
android:background="#91919191"
android:layout_rowWeight="1"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/qi"
android:text="7"
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/ba"
android:text="8"
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/jiu"
android:text="9"
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/jia"
android:text="+"
android:textSize="20sp"
android:textColor="#fff"
android:background="#91919191"
android:layout_rowWeight="1"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/si"
android:text="4"
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/wu"
android:text="5"
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/liu"
android:text="6"
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/jian"
android:text="-"
android:textSize="20sp"
android:textColor="#fff"
android:background="#91919191"
android:layout_rowWeight="1"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/yi"
android:text="1"
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/er"
android:text="2"
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/san"
android:text="3"
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/zuokuohao"
android:text="("
android:textSize="20sp"
android:textColor="#fff"
android:background="#91919191"
android:layout_rowWeight="1"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/ling"
android:text="0"
android:layout_columnSpan="2"
android:layout_rowWeight="1"
android:textSize="20sp"
android:layout_gravity="fill"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/dian"
android:text="."
android:textSize="20sp"
android:layout_rowWeight="1"
android:background="#ebebeb"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/youkuohao"
android:text=")"
android:textSize="20sp"
android:textColor="#fff"
android:background="#91919191"
android:layout_rowWeight="1"
android:layout_margin="2.5dp"
/>
<Button
android:id="@+id/dengyu"
android:text="="
android:textSize="20sp"
android:textColor="#fff"
android:background="#ee9a00"
android:layout_rowWeight="1"
android:layout_margin="2.5dp"
android:layout_columnSpan="4"
android:layout_gravity="fill"
/>
</GridLayout>
</LinearLayout>