Android七大布局
七大布局分别为:
- 线性布局(LinearLayout)
- 相对布局(RelativeLayout)
- 帧布局(FrameLayout)
- 表格布局(TableLayout)
- 绝对布局(AbsoluteLayout)
- 网格布局(GridLayout)
- 约束布局(ConstraintLayout)
基本概念
把界面中的控件按照某种规律摆放在制定的位置,解决应用程序在不同机器上的显示问题,其实现主要有两种方式:
1.代码:布局文件对应的java类都是ViewGroup类的子类
2.xml配置文件:所有的布局文件都是放在res/layout文件夹中
基本属性
layout_width 与 layout_height
设置布局文件的长度和宽度,常用取值为:wrap_content、fill_parent、match_parent
dp | 逻辑长度单位,在160dpi屏幕上,1dp=1px=1/160英寸。随着密度变化,对应的像素数量也变化,但并没有直接的变化比例。 dpi:屏幕上有多少个像素点。 |
dip | 与dp相同,多用于google的实例中 |
sp | 与dp类似,但是可以根据用户的字体大小首选项进行缩放 |
pt | 对象放其容器右侧 |
mm | 毫米,屏幕的物理尺寸 |
in | 英寸,屏幕的物理尺寸。每英寸等于2.54厘米 |
px | 像素 |
gravity与layout_gravity
gravity设置控件中内容相对于该控件的对齐方式,layout_gravity设置该控件相对于父控件的对齐方式
top | 对象放其容器顶部 |
bottom | 对象放其容器底部 |
left | 对象放其容器左侧 |
right | 对象放其容器右侧 |
center | 对象居中 |
center_vertical | 对象纵向居中 |
center_horizontal | 对象横向居中 |
fill | 对象整体填充 |
fill_vertical | 对象纵向填充 |
fill_horizontal | 对象横向填充 |
layout_marginTop 与 layout_marginBottom
当前视图上、下边缘到某条基线的距离,只能取固定值
1.线性布局(LinearLayout)
线性布局控制其中的控件按照横向或纵向方式排列,并且线性布局不会换行,当控件排列到窗体边缘,后面的控件就被隐藏,不会被显示出来。
orientation
设置线性布局的线性方向
horizontal | 水平 (默认) |
vertical | 垂直 |
layout_weight
指定父控件剩余空间分配比例的权重
注:1.水平方向的线性布局中使用weight时需要注意将宽度设置为0dp,垂直方向的线性布局中使用weight时需要将高度设置为0dp。
2.当只给一个控件配置权重时,可以使控件将剩余空间全部填充,使控件撑开
2.相对布局(RelativeLayout)
相对布局是通过相对定位的方式让控件出现在布局任意位置;在相对布局中如果不指定控件摆放的位置,那么控件都会被默认放在RelativeLayout的左上角。因此要先指定第一个控件的位置,再根据一个控件去给其他控件布局。
** 相对于父元素给控件布局** true 或 false
layout_centerHrizontal | 水平居中 |
layout_centerVertical | 垂直居中 |
layout_centerInparent | 相对于父元素完全居中 |
layout_alignParentBottom | 位于父元素的下边缘 |
layout_alignParentLeft | 位于父元素的左边缘 |
layout_alignParentRight | 位于父元素的右边缘 |
layout_alignParentTop | 位于父元素的上边缘 |
layout_alignWithParentIfMissing | 如果对应的兄弟元素找不到的话就以父元素做参照物 |
相对于兄弟元素给控件布局 id的引用名“@id/id-name”
layout_toRightof | 控件的左边缘与给定id控件的右边缘对齐 |
layout_toLeftof | 控件的右边缘与给定id控件的左边缘对齐 |
layout_below | 控件的上边缘与给定id控件的下边缘对齐 |
layout_alignRight | 控件的右边缘与给定id控件的右边缘对齐 |
layout_alignLeft | 控件的左边缘与给定id控件的左边缘对齐 |
layout_alignTop | 控件的上边缘与给定id控件的上边缘对齐 |
layout_alignBottom | 控件的下边缘与给定id控件的下边缘对齐 |
3.表格布局(TableLayout)
表格布局可以将视图按行、列进行排列,一个表格由一个 TableLayout 标签和若干个 TableRow 标签组成
某列被收缩
xml属性:shrinkColumns
方法:setColumnsShrinkAble(int,boolean)
某列被拉伸
xml属性:stretchColumns
方法:setColumnsStretchAble(int,boolean)
某列被隐藏
xml属性:collapseColumns
方法:setColumnsCollapsed(int,boolean)
合并单元格
xml属性:layout_span=“3”
4.帧布局(FrameLayout)
为每个加入其中的组件创建单独的帧,看上去像是组件叠加在一起
5.绝对布局(absoluteLayout)
6.网格布局(GridLayout)-Android 4.0 新布局
使用的时候需要注意兼容,引入依赖: compile ‘com.android.support:gridlayout-v7:22.+’
GridLayout属性:
columnCount | 最大列数 |
rowCount | 最大行数 |
orientation | 子元素中的布局方向 |
alignmentMode | alignBounds(值=0):对齐子视图边界。alignMargins(值=1):对齐子视图边距。 |
columnOrderPreserved | 使列边界显示的顺序和列索引的顺序相同,默认true |
rowOrderPreserved | 使行边界显示的顺序和行索引的顺序相同,默认是true |
useDefaultMargins | 没有指定视图的布局参数时使用默认的边距,默认值是false |
item属性:
layout_column | 表明控件从第几列开始 |
layout_row | 表明控件从第几行开始 |
layout_columnSpan | 表明控件跨越多少列 |
layout_rowSpan | 表明控件跨越多少行 |
layout_gravity | 指定该单元格在容器中的位置 |
layout_columnWeight | 列权重 |
layout_rowWeight | 行权重 |
7.约束布局(ConstraintLayout)
Android Studio2.2推出的新布局,并从2.3版本开始成为默认布局。 为了解决复杂的布局,嵌套过多布局问题。
ConstraintLayout使用起来比RelativeLayout更灵活,性能更出色,可以按照比例约束控件位置和尺寸,更好适配屏幕大小的不同机型。
相对定位:
layout_constraintLeft_toLeftOf | 该控件左侧与另一个控件的左侧对齐 |
layout_constraintLeft_toRightOf | 该控件左侧与另一个控件的右侧对齐 |
layout_constraintRight_toLeftOf | 该控件右侧与另一个控件的左侧对齐 |
layout_constraintRight_toRightOf | 该控件右侧与另一个控件的右侧对齐 |
layout_constraintTop_toTopOf | 该控件顶部与另一个控件的顶部对齐 |
layout_constraintTop_toBottomOf | 该控件顶部与另一个控件的底部对齐 |
layout_constraintBottom_toTopOf | 该控件底部与另一个控件的顶部对齐 |
layout_constraintBottom_toBottomOf | 该控件底部与另一个控件的底部对齐 |
layout_constraintBaseline_toBaselineOf | 文本基线对齐 |