1 布局管理的来源

  为了让UI在不同的手机屏幕上都能运行良好----不同手机屏幕的分辨率/尺寸并不完全相同,如果让程序手动控制每个组件的大小、位置,会给编程带来巨大的麻烦。为了解决这个问题。android提供了布局管理器。布局管理器可以根据运行平台来调整组件大小,程序员要做的只是为容器选择合适的布局管理器。

2 布局管理类关系视图

  布局管理器与java的swing编程不同,布局管理器本身就是一个UI组件,所有的布局管理器都ViewGroup的子类,其关系如下图。所有的布局管理器都可以作为容器类使用,通过addView添加组件,另外布局管理器本身也可以作为View组件添加到布局管理器中。

3 线性布局管理器LinearLayout

  线性布局由LinearLayout类代表,将容器里的组件一个挨一个地排列起来,LinearLayout不会自动换行,到末尾后剩余的组件将不会被显示出来。LinearLayout支持的常用xml属性及其说明。

xml属性 说明
android:baselineAligned 该属性为false,将会阻止布局管理器与它的子元素基线对其
android:divider 设置垂直布局时,两个按钮之间的分隔条
android:gravity 设置布局管理器内组件的对齐方式。该属性支持top/button/left/right/center_vertical/fill_vertical...
android:measureWithLargestChild 当属性设置为true时,所有带权重的子元素都会具有最大元素的最小尺寸
android:orientation 设置布局管理器内组件的排列方式vertical/horizontal默认值

3.1FrameLayout也有LayoutParams,MarginLayoutParams内部类控制参数;如下为LinearLayout.LayoutParams控制属性

xml属性 说明
android:layout_gravity 指定该布局管理器内子组件布局方式
android:layout_weight 指定该子元素在linearLayout中所占的权重

4 表格布局

  • 表格布局由TableLayout所代表,继承自LinearLayout,因此其本质仍然是线性管理器
  • 表格借助TableRow来控制其他组件的行数与列数,如果某组件独占一行则可省去TableRow直接添加该组件
  • 在表格布局中,列的宽度由该列中最宽的那个单元格所决定;整个表格布局的宽度,则取决于父容器的宽度
  • TableLayout的常用xml属性及其说明
xml属性 说明
android:collapseColumns 设置需要被隐藏的列序号,并用逗号隔开
android:shrinkColumns 设置需要被压缩的列序号,并用逗号隔开
andriod:stretchColumns 设置需要被拉伸的列序号,并用逗号隔开

5 帧布局

  • 帧布局由FrameLayout所代表,继承自VIewGroup组件
  • 帧布局为每个加入其中的组件创建一个空白区域(称为一帧)
  • 每个子组件占据一帧,这些帧会根据gravity属性值自动对齐
  • FrameLayout也有LayoutParams,MarginLayoutParams内部类控制参数
  • FrameLayout常用的xml属性及其说明
xml属性 说明
android:foreground 设置该帧布局的前景图像
android:foregroundGravity 定义绘制前景图像的gravity属性

 6 相对布局

  • 相对布局由RelativeLayout代表,相对布局容器内子组件的位置总是相对兄弟组件、父容器来决定的,因此这种相对布局方式被称为相对布局
  • 如果A的位置由B组件位置决定,android要求先定义B组件,再定义A组件
  • LayoutParams还继承了MarginLayoutParams,故Relative布局容器也可以指定MarginLayoutParams所支持的属性
  • RelativeLayout可支持两个xml属性
xml属性 说明
android:gravity 设置布局容器内各子组件的对齐方式 
android:ignoreGravity 设置哪个组件不受gravity属性的影响
  • RelativeLayout.LayoutParams可支持的xml属性及其说明
android:layout_centerHorizontal 控制该子组件是否位于布局容器的水平居中
android:layout_vertical
控制该子组件是否位于布局容器的垂直居中
android:layout_centerInParent 控制该子组件是否位于布局容器的中央位置
android:layout_alignParentButtom 控制该子组件是否位于布局容器的底端对齐
android:layout_alignParentLeft 控制该子组件是否位于布局容器的左端对齐
android:layout_alignParentRight 控制该子组件是否位于布局容器的右端对齐
android:layout_alignParentTop 控制该子组件是否位于布局容器的顶端对齐
android:layout_toRightOf 控制该子组件位于给出ID组件的右侧
android:layout_toLeftOf 控制该子组件位于给出ID组件的左侧
android:layout_above 控制该子组件位于给出ID组件的上方
android:layout_below 控制该子组件位于给出ID组件的下方
android:layout_alignTop 控制该子组件位于给出ID组件的上边界对齐
android:layout_alignBottom 控制该子组件位于给出ID组件的下边界对齐
android:layout_alignLeft 控制该子组件位于给出ID组件的左边界对齐
android:layout_alignRight 控制该子组件位于给出ID组件的右边界对齐

7 网格布局

  • 网格布局由GridLayout代表,是android4.0新增的布局管理器,如需在早期版本中使用,则需要导入相应的支撑库
  • GridLayout的xml属性及其相关方法
xml属性 说明
android:alignmentMode 该布局管理器采用的对齐模式
android:columnCount 该网格的列数量
android:columnOrderPreserved 该网格容器是否保留列序号
android:rowCount 该网格的行数量
android:rowOrderPreserved 该网格容器是否保留行序号
android:useDefaultMargins 该布局管理是否使用默认的页边距
  • LayoutParams的xml属性及其相关方法
xml属性 说明
android:layout_column 设置该子组件在GridLayout的第几列
android:columnSpan 设置该子组件在GridLayout的横向跨几列
android:layout_gravity 该子组件采用何种方式占据网格空间
android:layout_row 设置该子组件在GridLayout的第几行
android:layout_rowSpan 设置该子组件在GridLayout的横向跨几行

8 绝对布局(AbsoluteLayout)

  已过时,很少用,这里不深究

第1组UI组件:布局管理器的更多相关文章

  1. 安卓开发:UI组件-布局管理器和文本显示

    接下来的随笔,记录了在学习b站up主:天哥在奔跑,录制的教学视频的同时,进行一个app开发. up主:天哥在奔跑 视频地址:https://www.bilibili.com/video/av38409 ...

  2. 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

    问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...

  3. Android UI组件:布局管理器

    为了更好的管理Android应用的用户界面中的组件,Android提供了布局管理器.通过使用布局管理器,Android应用的图形用户界面具有良好的平台无关性.通常,推荐使用布局管理器来管理组件的分布. ...

  4. Java可视化编程,基于布局管理器的UI设计

    在<事件驱动模型>讲述了如何将用户与功能实现代码联系到一起.怎么样便于用户理解和符合用户的使用习惯? 本篇还是就此问题作分析,站在用户角度上分析UI各组件倒底该如何设计呈现. 优秀的UI会 ...

  5. 第13章 Swing程序组件----常用布局管理器

    在Swing中,每个组件在容器中都有一个具体的位置和大小,而在容器中摆放各种组件时很难判断其具体位置和大小.布局管理器提供了Swing组件安排.展示在容器中的方法及基本的布局功能. Swing提供的常 ...

  6. 【java】浅析java组件中的布局管理器

    这篇博文笔者介绍一下java组件中,常用的布局管理器.java组件中的布局方式有好几十种,所有的这些布局管理器都实现了java.awt.LayoutManager接口.接下来笔者介绍一下常用的5种布局 ...

  7. Swing布局管理器介绍

    创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://zhangjunhd.blog.51cto.com/113473/128174 当选 ...

  8. (转)Java 的swing.GroupLayout布局管理器的使用方法和实例

    摘自http://www.cnblogs.com/lionden/archive/2012/12/11/grouplayout.html (转)Java 的swing.GroupLayout布局管理器 ...

  9. Android开发5:布局管理器2(表格布局TableLayout)

    版本:Android4.3 API18  学习整理:liuxinming 概念      TableLayout继承了LinearLayout,因此它的本质依然是线性布局管理器.      表格布局采 ...

随机推荐

  1. 跨平台的目录遍历实现方法(windows和linux已经测试)

    dirent.h是gcc下的一个头文件,在windows中是没有的.这个文件中封装了几个对目录进行操作函数: static DIR *opendir (const char *dirname);sta ...

  2. Struts 2 + Spring2.5 + Hibernate3整合例子

    一.效果 1. 2. 二.结构 1. 2.用到jar包 antlr-2.7.6.jaraspectjrt.jaraspectjweaver.jarc3p0-0.9.1.jarcglib-nodep-2 ...

  3. Revit 二次开发 沿弧形路径创建拉伸屋顶

    沿弧形路径创建拉伸屋顶 Revit的API中只能按照直线创建拉伸屋顶,不能按照曲线创建拉伸屋顶.在Revit的界面当中,可以用 构建->内建模型,进行放样创建屋顶.但是没有办法代码内建模型. 可 ...

  4. ios 应用剖析

    在创建HelloWorld的过程中,生成了很多文件(展开Xcode左边的项目导航视图可以看到,如图2-8所示),它们各自的作用是什么?彼此间又是怎样的一种关系呢? 图2-8 项目导航视图 如图2-8所 ...

  5. 我的JAVA基础学习史1

    又开始学习了..很是兴奋呢~~~~ 本来是想学安卓的,但是安卓的视频课程中,第一阶段是环境,第二阶段是JAVA基础(讲课的这个老师真是在念课本,但是实在没有办法,没找到更好.更完整的资料了). 虽然以 ...

  6. Unable to open c

    1. Unable to open c:\Cadence\PSD_14.2\tools\capture\allegro.cfg for reading. Please correct the abov ...

  7. Eclipse环境下JBoss调试,解决引用的工程不被部署的问题

    其实算是一个很小的经验,在eclipse环境下进行jboss的部署,因为要定义某公共包的问题,将代码down下来做了个工程,部署时发现jboss提示:class not found! 从jboss部署 ...

  8. bzoj2456

    有趣的题目 空间1mb,所以开数组的算法就不要想了(我一开始没看到……) 仔细读题,然后发现这里他限定众数为出现超过n div 2次 也就是说,这个数可以对应每一个不相同的数消掉,最终还剩下这个数 也 ...

  9. BZOJ_3172_[TJOI2013]_单词_(AC自动机)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=3172 \(n\)个单词组成一篇文章,求每个单词在文章中出现的次数. 分析 这道题很像BZOJ_ ...

  10. acdream 小晴天老师系列——竖式乘法(简单穷举)

    小晴天老师系列——竖式乘法 Time Limit: 4000/2000MS (Java/Others)    Memory Limit: 128000/64000KB (Java/Others)   ...