在Android应用开发中,为了更好地管理Android应用的用户界面里的各组件,Android提供了布局管理器来实现Android应用的图形用户界面平台无关性,其中所有布局管理器的父类为ViewGroup。一般来说,推荐使用布局管理器来管理组件的分布、大小,而不是直接设置组件位置和大小。在开发当中,最常用的方法是预先设置好容器边距(分布)、大小,然后其包含的组件使用"fill_match"或"wrap_content"自动适应父容器即可。 一、LinearLayout线性布局 LinearLayout布局管理器,即控制个组件横向/纵向排列(android:orientation属性控制)。需要注意的是,Android的线性布局不会换行,当组件一个挨着一个地排到头之后,剩下的组件将不会被显示出来。LinearLayout支持的常用XML属性。 (1)android:baselineAligned:该属性设置为false,将会阻止该布局管理器与它的子元素的基线对齐; (2)android:divider:用于设置垂直布局时两个按钮之间的分隔条; (3)android:gravity:用于设置LinearLayout(容器)所包含的所有子元素的对齐方式,如left|center_vertical代表所有子元素出现在屏幕左边,而且垂直居中。需要注意的是,一般容器才支持指定该属性; (4)android:orientation:设置布局管理器内组件的排列方式,如vertical为垂直排列(默认值); (5)android:measureWithLargestChild:当该属性设为true时,所有带权重的子元素都会具有最大元素的最小尺寸; (6)android:layout_gravity:指定该子元素在LinearLayout(父容器)中的对齐方式(某个子元素相对于LinearLayout容器而言); (7)android:layout_weight:指定该子元素在LinearLayout中所占的权重; 理解:LinearLayout布局管理器支持指定所包含控件(widgets)或容器(containers)的填充权值,通过该属性实现填充屏幕上的剩余空间。避免了在一个大屏幕中,一串widgets或者是containers挤成一堆的情况,而是允许他们放大填充空白,剩余的空间会按这些widgets或者是containers指定的权值比例分配屏幕。默认的 weight 值为0,表示按照widgets或者是containers实际大小来显示,若高于0的值,则将Container剩余可用空间分割,分割大小具体取决于每一个widget或者是container的layout_weight及该权值在所有widgets或者是containers中的比例。如有两个文本,权值分别为2和1,那么剩余空间的2/3给权值为2的,1/3大小给权值为1的。
二、TableLayout表格布局 TableLayout表格布局管理器继承于LinearLayout,其本质依然是线性布局管理器。表格布局采用行、列的形式来管理UI组件,TableLayout主要通过添加TableRow、其他主键来控制表格的行数和列数。即每次向TableLayout中添加一个TableRow(也为容器),就表示添加一行;向每个TableRow中添加其他子组件该表格就增加一列。 注意:在表格布局中,列的宽度由该列中最宽的那个单元格决定,整个表格布局的宽度则取决于父容器的宽度(默认沾满父容器)。TableLayout支持的常用XML属性如下: (1)支持LinearLayout所有属性; (2)android:collapseColumns:如果某个列或多个被设为Collapsed,该列的所有单元格被隐藏; (3)android:shrinkColumns:如果某个列或多个列设为Shrinkable,该列的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度; (4)android:stretchColumns:如果某个列或多个列设为Strtchable,该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满表格剩余空间。 实例如下:定义一个表格布局,指定第1列和第2列可以被拉伸,第3列可以被隐藏 <TableLayout android:id="+id/tableLayout01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:stretchColumns="1,2" android:collapseColumns="3"> <TableRow ....../> <TableRow ....../> </TableLayout>

三、FrameLayout帧布局 FrameLayout帧布局继承于ViewGroup组件,帧布局容器为每个加入其中的组件创建一个空白的区域(即为一帧)。每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐,帧布局的效果即把组件一个一个地叠加在一起。FrameLayout支持的常用XML属性如下: (1)android:gravity:设置容器中所有子组件的对齐方式; (2)android:layout_gravity设置某个子组件相对于容器中的对齐方式; (3)android:foreground:设置该帧布局容器的前景图像; (4)android:foregroundGravity:定义绘制前景图像的gravity属性; 举例: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#f0f" android:height="300dp" android:width="300dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#f00" android:height="250dp" android:width="250dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#ff0" android:height="200dp" android:width="200dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#aaa" android:height="150dp" android:width="150dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="#fc0" android:height="100dp" android:width="100dp" /> </FrameLayout> 显示效果:
注:android:width 定义控件上面的文本(TextView) 的宽度,需要与 android:layout_width 配合起来作用的,如果 android:layout_width="fill_parent" 的话,那么设置 android:width 是没有意义的。 四、RelativeLayout相对布局 RelativeLayout表示相对布局,相对布局管理器内子组件的位置总是相对兄弟组件、父容器来决定,每个组件或容器事先需指定android:id属性。RelativeLayout相对布局支持的常用XML属性如下: (1)android:gravity:设置该布局容器各子组件的对齐方式(整体相对于父容器); (2)android:ignoreGravity:设置哪个组件不受gravity属性的影响; (3)android:layout_centerHorizontal:控制该子组件是否位于布局容器的水平居中; (4)android:layout_centerVertical:控制该子组件是否位于布局容器的垂直居中;
(5)android:layout_centerInParent:控制该子组件是否位于布局容器的中央位置;
(6)android:layout_alignParentButtom:控制该子组件是否位于布局容器的低端对齐;
(7)android:layout_alignParentLeft:控制该子组件是否位于布局容器的左边对齐; (8)android:layout_alignParentRight:控制该子组件是否位于布局容器的右边对齐;
(9)android:layout_alignParentTop:控制该子组件是否位于布局容器的顶端对齐;
(10)android:layout_toRightOf:控制该子组件位于给出ID组件的右侧; (11)android:layout_toLeftOf:控制该子组件位于给出ID组件的左侧;
(12)android:layout_above:控制该子组件位于给出ID组件的上方;
(13)android:layout_below:控制该子组件位于给出ID组件的下方;
(14)android:layout_alignTop:控制该子组件位于给出ID组件的上边界对齐;
(15)android:layout_alignBottom:控制该子组件位于给出ID组件的下边界对齐;
(16)android:layout_alignLeft:控制该子组件位于给出ID组件的左边界对齐;
(17)android:layout_alignRight:控制该子组件位于给出ID组件的右边界对齐;

五、GridLayout网格布局 GridLayout网格布局是Android 4.0新增的布局管理器,只能在Android 4.0及以后的版本使用。GridLayout类似于HTML中的table标签,它把整个容器划分成为"行*列"个网格,每个网格可以放置一个组件,另外,也可以设置一个组件横跨多个列和多个行。GridLayout相对布局支持的常用XML属性如下: (1)android:alignmentMode:设置该布局管理器采用的对齐模式; (2)android:columnCount:设置该网格的列数量; (3)android:clolumnOrderPreserved:设置该网格容器是否保留列序列号; (4)android:rowCount:设置该网格的行数量; (5)android:rowOrderPreserved:设置该网格容器是否保留行序列号; (6)android:useDefaultMargins:设置该布局管理器是否使用默认的页边距 (7)android:layout_column:设置该子组件在GridLayout的第几列 (8)android:layout_columnSpan:设置该子组件在GridLayout横向上跨几行列
(9)android:layout_row:设置该子组件在GridLayout的第几行
(10)android:layout_rowSpan:设置该子组件在GridLayout纵向上跨几行
(11)android:layout_gravity:设置该子组件采用何种方式占据该网格的空间(相对于单个网格而言)

六、Android中常用的距离单位 1.px:像素,即每个px对应屏幕上的一个店。 2.dip/dp:设备独立像素。即一种基于屏幕密度的抽象单位,在每英寸160点的显示器上,1dip=1px,用于设置组件大小或距离。随着屏幕密度的改变,dip与px的换算会发生改变。 3.sp(scaled pixels,比例像素):主要处理字体的大小,可以根据用户的字体大小首选项进行缩放; 4.in:英寸,标准的长度单位; 5.pt:磅,1/72英寸

更多相关文章

  1. Android之路之十七(重要组件之Service)
  2. Android(安卓)Fragment的使用
  3. Android用户界面开发(10):Button
  4. Android用户界面开发(11):Menu
  5. 免费的Android(安卓)UI库及组件推荐
  6. 深入Android【四】—— 组件调用
  7. 【Android】Navigation初试-基于官方demo的练习
  8. 安卓开发学习之002 LinearLayout之android:layout_gravity详解
  9. ReactNative全面屏(Android)适配问题

随机推荐

  1. android tools命名空间
  2. android 隐藏ListView滚动条
  3. Android桌面小部件实例 桌面小时钟
  4. android解析xml文件 Android(安卓)DOM解
  5. android布局属性详解
  6. android 事件处理机制
  7. Android中activity触摸操作dispatchTouch
  8. Android(安卓)boot process stub
  9. Android获取 应用程序大小,数据大小,缓存大
  10. Android内存泄漏分析