相关知识
1.布局
Android设计中包括界面设计和代码编写两大部分,界面中常用的五大布局方式如下:
(1)LinearLayout
LinearLayout(线性布局)是一种常用的布局。这个布局会将它所包含的控件在线性方向上依次排列,如图2-3所示。
图2-3 线性布局
图2-3 线性布局(续)
LinearLayout具有4个极其重要的属性,直接决定元素的布局和位置:
①android:layout_gravity:本元素相对于父元素的重力方向。
②android:gravity:本元素所有子元素的重力方向。
③android:orientation:线性布局以列或行来显示内部子元素。
④android:layout_weight:子元素对未占用空间水平或垂直分配权重值。
当android:orientation="vertical"时,表示布局中的控件都是垂直分布的,且只有水平方向的设置才起作用,垂直方向的设置不起作用,即left、right、center_horizontal是生效的。
当android:orientation="horizontal"时,表示布局中的控件都是水平分布的,且只有垂直方向的设置才起作用,水平方向的设置不起作用,即top、bottom、center_vertical是生效的。
还有两个属性是使用频率最高的:android:layout_height和android:layout_width,一般有match_parent、warp_content和fill_parent选项:
①match_parent:强制性让它布满整个屏幕或填满父控件的空白。
②wrap_content:表示大小刚好足够显示当前控件中的内容。
③fill_parent:从Android 2.2开始之后的版本中fill_parent和match_parent表示的意思是一样的。
(2)FrameLayout
FrameLayout(帧布局)是从屏幕的左上角(0,0)坐标开始布局,多个组件层叠排列,第一个添加的组件放到最底层,最后添加到框架中的视图显示在最上面。上一层的会覆盖下一层的控件,如图2-4所示。
(3)TableLayout
TableLayout(表格布局)是一个ViewGroup以表格显示它的子视图(View)元素,即行和列标识一个视图的位置,如图2-5所示。
表格布局常用的属性如下:
①android:collapseColumns:隐藏指定的列。
②android:shrinkColumns:收缩指定的列以适合屏幕,不会溢出屏幕。
图2-4 帧布局
图2-5 表格布局
③android:stretchColumns:尽量把指定的列填充空白部分。
④android:layout_column:控件放在指定的列。
⑤android:layout_span:该控件所跨越的列数。
(4)RelativeLayout
RelativeLayout(相对布局)是按照组件之间的相对位置来布局,例如在某个组件的左面、右面、上面和下面等,如图2-6所示。
RelativeLayout常用的属性如下:
①android:layout_centerHrizontal:水平居中。
②android:layout_centerVertical:垂直居中。
③android:layout_centerInparent:相对于父元素完全居中。
④android:layout_alignParentBottom:贴紧父元素的下边缘。
⑤android:layout_alignParentLeft:贴紧父元素的左边缘。
⑥android:layout_alignParentRight:贴紧父元素的右边缘。
图2-6 相对布局
⑦android:layout_alignParentTop:贴紧父元素的上边缘。
⑧android:layout_alignWithParentIfMissing:如果对应的兄弟元素找不到,就以父元素照物。
(5)GridLayout
GridLayout(网格布局)把整个容器划分为rows×columns个网格,每个网格可以放置一个组件,如图2-7所示。性能及功能都要比TableLayout好,例如GridLayout布局中的单元格可以跨越多行,而TableLayout则不行。此外,其渲染速度也比TableLayout要快。
图2-7 网格布局
GridLayout常用的属性如下:
①android:alignmentMode:设置该布局管理器采用的对齐模式。
②android:columnCount:设置该网格的列数量。
③android:rowCount:设置该网格的行数量。
④android:rowOrderPreserved:设置该网格容器是否保留行序号。
⑤android:useDefaultMargins:设置该布局管理器是否使用默认的页边距。