布局
布局管理器
双标签容器,可以嵌套其它widget或layout组件。
包括框架(Frame)、线性(Linear)、相对(Relative)、表格(table)、约束(Constraint)和网格(Grid)布局。另有绝对布局已淘汰。
通常情况下xml布局文件的根节点是一个layout组件。
布局嵌套
- 根布局管理器必须要有xmlns属性;
- 一个布局文件中最多只能有一个根布局管理器;
- 不能嵌套太深(<5层),否则会影响性能。
LinearLayout 线性布局
所有子元素在水平或垂直方向依次排列,子组件高度或宽度超过父容器时会溢出不显示。
常用属性
orientation:布局方向,有vertical(垂直)和horizontal(水平)两个选项,其中默认为水平。gravity:内部子组件对齐方式,可选列表:top、bottom、left、right、center _ verti cal、fill_vertical、center_horizontal、fill_horizontal、center、fill、clip_vertical、lip_horizontallayout_gravitybackground:背景颜色/图片layout_width/layout_height:宽高,- 可选值:match_parent(与父容器宽度相同)、wrap_content(由内容决定)
weight:按比例显示子控件时子控件的宽度/高度权重
约束布局
标签名为androidx.constraintlayout.widget.ConstraintLayout。
api文档:ConstraintLayout | API reference | Android Developers
控件之间、控件与父布局之间具有约束关系,控件的位置按照约束计算,可以按比例约束控件的位置和尺寸。
约束布局最主要的参照是四条边,即left、right、top和buttom,除此以外还有文字基准线(baseline),用于对其文字;start和end,和左右类似但是相对参照。
存在相悖的约束时,后定义的会覆盖先定义的。
位置约束属性
| xml属性 | 说明 |
|---|---|
| app:layout_constraintLeft_toLeftOf | 控件左边框对齐某个控件的左边框 |
| app:layout_constraintLeft_toRightOf | 控件左边框对齐某个控件的右边框 |
| app:layout_constraintRight_toLeftOf | 控件右边框对齐某个控件的左边框 |
| app:layout_constraintRight_toRightOf | 控件右边框对齐某个控件的右边框 |
| app:layout_constraintTop_toTopOf | 控件顶部边框对齐某个控件的顶部边框水平 |
| app:layout_constraintTop_toBottomOf | 控件顶部边框对齐某个控件的底部边框水平 |
| app:layout_constraintBottom_toTopOf | 控件底部边框对齐某个控件的顶部边框水平 |
| app:layout_constraintBottom_toBottomOf | 控件底部边框对齐某个控件的底部边框水平 |
| app:layout_constraintBaseline_toBaselineOf | 控件文本基线对齐某个控件文本基线水平 |
间距约束属性
| XML属性 | 说明 |
|---|---|
| android:layout_marginBottom | 元素底边缘相对标尺元素的距离 |
| android:layout_marginLeft | 元素左边缘相对标尺元素的距离 |
| android:layout_marginRight | 元素右边缘相对标尺元素的距离 |
| android:layout_marginTop | 元素上边缘相对标尺元素的距离 |
注意事项:
- 在约束布局里面要实现margin,必须先约束该控件在约束布局里的
位置,也就是需要先定义与其他控件的约束定位关系。
-
margin必须≥0
-
远离的含义:下边线上移、上边线下移、左边线右移、右边线左移
子元素常用属性
id:约束布局中作为基准的元素必须定义id,值的格式为"@+id/具体的id"。app:layoout_constraintLeft_toRightOf:当前控件的左边框对齐某个控件的右边框,值为被对齐的边框的id,属性中的参照均可按情况更改为上下左右和基准线
如果把四边的对齐都设置为parent,则代表在父级中居中。其余情况只需要保证上下和左右各有一边对齐即可。android:layout_marginBottom:元素下边缘和相对对齐位置的偏移,属性中的方向均可按情况更改为上下左右和基准线。
其值是一个带单位的数值,不能是负数。
约束链
提供了以下属性:
-
android:layout_constraintHorizontal_chainStyle:该属性只需要在约束链的首个元素中设置,根据约束的方向更改
Herizontal和Vertical。提供了以下选项:
属性值 说明 spread 展开元素 (默认) spread_inside 展开元素,但链的两端贴近parent packed 链的元素将被打包在一起
滚动视图
ScrollView用于添加垂直方向的滚动条,HorizontalScrollVeiw用于添加水平方向的滚动条。其是一种容器,允许且仅允许在其中放一个直接子控件。