目录
七大布局
声明方式
- 使用XML文件描述界面布局
- 在Java代码中通过调用方法进行控制
- 我们既可以使用任何一种声明界面布局的方式,也可以同时使用两种方式
- 建议尽量采用XML文件声明界面元素布局。在程序运行时动态添加界面布局会大大降低应用响应速度,但依然可以在必要时动态改变屏幕内容
LinearLayout线性布局
简介
- 布局将它所包含的控件在线性方向上一次排列,方向分为 水平方向和数值方向。
属性介绍
XML属性 | 相关方法 | 说明 |
android:gravity | setGravity(int) | 组件的对齐方式 支持top, left, right, center_vertical, fill_vertical, center_horizontal, fill_horizontal, center, fill, clip_vertical, clip_horizontal。 也可以同时指定多种对齐方式的组合 |
android:orientation | setOrientation(int) | 组件的排列方式 "vertical" | "horizontal" |
android:layout_gravity | 该子元素在LinearLayout中的对齐方式 | |
android:layout_weight | 子元素在LinearLayout中所占的权重 |
TableLayout表格布局
简介
- 继承自LinearLayout,本质上仍然是线性布局管理器
- 每向TableLayout中添加一个TableRow就代表一行
- 每向TableRow中添加一个一个子组件就表示一列
属性设置
XML属性 | 相关方法 | 说明 |
android:collapseColumns | setColumns(int, boolean) | 设置需要被隐藏的列的序号,多个序号间用逗号分隔 |
android:shrinkColumns | setShrinkAllColumns(boolean) | 设置需要被收缩的列的序号 |
android:stretchColumns | setStretchAllColumns(boolean) | 设置允许被拉伸的列的序号 |
在表格布局中,可以为单元格设置如下三种行为方式: Shrinkable:该列的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度; Strentchable:该列所有单元格的宽度可以被拉伸,以保证组件能完全填满表格空余空间; Collapsed:如果该列被设置为Collapsed,那么该列的所有单元格会被隐藏;
FrameLayout帧布局
简介
- 继承自ViewGroup组件,每个子组件占据一帧,这些帧会根据gravity属性执行自动对齐。
常用属性
XML属性 | 相关方法 | 说明 |
android:foreground | setForeground(Drawable) | 设置该帧布局容器的前景图像 |
android:foregroundGravity | setForeGroundGraity(int) | 定义绘制前景图像的gravity属性 |
RelativeLayout相对布局
常用属性
XML属性 | 相关方法 | 说明 |
android:gravity | setGravity(int) | |
android:ignoreGravity | setIgnoreGravity(int) | 设置哪个组件不受gravity属性的影响 |
- 为了控制该布局容器的各子组件的布局分布,RelativeLayout提供了一个内部类:RelativeLayout.LayoutParams
- RelativeLayout.LayoutParams只能设为boolean的XML属性(android:layout_centerHorizontal | 设置该子组件是否位于布局容器的水平居中)
- RelativeLayout.LayoutParams属性值为其他UI组件ID的XML属性(android:layout_toRightOf | 控制该子组件位于给出ID组件的右侧)
GridLayout网格布局
简介
- 与之前的TableLayout有些相似,它把整个容器划分为rows × columns个网格,每个网格可以放置一个组件。
- 性能及功能都要比tablelayout好,比如GridLayout布局中的单元格可以跨越多行,而tablelayout则不行,此外,其渲染速度也比tablelayout要快
- GridLayout提供了setRowCount(int)和setColumnCount(int)方法来控制该网格的行和列的数量
常用属性
XML属性 | 相关方法 | 说明 |
android:alignmentMode | setAlignmentMode(int) | 设置该布局管理器采用的对齐模式 |
android:columnCount | setColumnCount(int) | 设置该网格的列数量 |
android:columnOrderPreserved | setColumnOrderPreserved(boolean) | 设置该网格容器是否保留序列号 |
android:roeCount | setRowCount(int) | 设置该网格的行数量 |
android:rowOrderPreserved | setRowOrderPreserved(boolean) | 设置该网格容器是否保留行序号 |
android:useDefaultMargins | setUseDefaultMargins(boolean) | 设置该布局管理器是否使用默认的页边距 |
- 为了控制GridLayout布局容器中各子组件的布局分布,GridLayout提供了一个内部类:GridLayout.LayoutParams,来控制Gridlayout布局容器中子组件的布局分布
XML属性 | 说明 |
android:layout_column | 设置该组件在GridLayout的第几列 |
android:layout_columnSpan | 设置该子组件在GridLayout横向上跨几列 |
android:layout_gravity | 设置该子组件采用何种方式占据该网格的空间 |
android:layout_row | 设置该子组件在GridLayout的第几行 |
android:layout_rowSpan | 设置该子组件在GridLayout纵向上跨几行 |
AbsoluteLayout绝对布局
简介
- 即Android不提供任何布局控制,而是由开发人员自己通过X坐标、Y坐标来控制组件的位置
- 每个组件都可指定如下两个XML属性:layour_x,layout_y
- 绝对布局已经过时,不应使用或少使用
ConstraintLayout约束布局
简介
- 约束布局减少了嵌套,可以使得界面的效率更高,故七大布局方法中,约束布局为人们所推崇
- 同时具有Relative Layout和Linear Layout的优点、特性。功能强大
- 可以在不嵌套view group的情况下实现非常庞大、复杂的布局。实现扁平化
- 性能要比其他布局方式高
- 可以有效地解决布局嵌套过多的问题
常用方法
XML属性 | 说明 |
app:layout_constraint**_to**Of | 将所需视图的上/下/左/右/前/后与另一个视图的上/下/左/右/前/后对齐 |
app:layout_constraint**_bias | Horizontal 控件的水平偏移比例 Vertical 控件的垂直偏移比例 |
app:layout_constraintBaseline_toBaselineOf | 基线与基线对齐 |
app:layout_constraintDimensionRatio="16:9" | 设置控件的宽高比 不能设置控件的高度,只能设置0dp(match_constraint) |
android:layout_width="0dp" app:layout_constraintHorizontal_weight="1" | 设置一组控件之间所占空间的比例 |
android:layout_width="match_contraint" | 充满全部屏幕 需要把这一组控件的对应width或height设置为match_contraint |
android:orientation="horizontal | vertical" layout_constraintGuide_begin layout_constraintGuide_end layout_constraintGuide_percent | 主要用于辅助布局,即类似为辅助线,横向的、纵向的 距离顶部/底部/顶部百分比 |