布局
LinearLayout
- orientation
- gravity 控制组件所包含的所有子元素对齐方式
- layout_gravity 控制组件在父容器的对齐方式
- 若父容器的orientation为vertical(从上往下布局),所以一个控件控制的位置为水平的位置
- background
- divider 分割线(也可以使用View设计)
- src
- showDividers 分割线所在位置:none(无)、beginning、end、middle
- dividerPadding 设置分割线的padding,左右间距分隔
- layout_weight(权重)等比例划分区域,对应长度一般设置0dp
注意:是在原来的基础上进行增加;若任何的一个为match_parent 则该占比所有
其他情况的计算思路:都为match_parent,第一个为2,第二个第三个都为1,则需要屏幕3,有屏幕1,所以剩余屏幕-2
则第一块区域:1-2*(2/4)=0;所以第一块不显示,以此类推
注意因为orientation为竖直方向,则weight对应竖直方向的比例
RelativeLayout
默认从左上角开始,后将前覆盖
根据父容器定位
根据兄弟组件定位
FrameLayout帧布局
默认从左上角开始,后将前覆盖
<FrameLayout
android:layout_width="300sp"
android:layout_height="300sp"
android:foreground="@mipmap/ic_launcher"
android:foregroundGravity="right|bottom"
android:background="#ffff00"/>
TableLayout表格布局
默认占满一行,所以需要与TableRow搭配使用
每一行占满不会自己缩小
- 相对整个布局
<!-- android:collapseColumns="0,2"隐藏第几个控件,从0开始-->
<!-- android:stretchColumns="1"第二个控件允许被拉伸,前提需要有空间-->
<!-- android:shrinkColumns="1"第二个空间被压缩,前提是当前行被挤压到,注意:当前行太长可能整个空间不见-->
- 相对于子控件
<!-- android:layout_column="2"跳过几列去显示-->
<!-- android:layout_span="2"当前控件跨越几列去显示-->
整体案例说明
<?xml version="1.0" encoding="utf-8"?>
<!-- android:collapseColumns="0,2"隐藏第几个控件,从0开始-->
<!-- android:stretchColumns="1"第二个控件允许被拉伸,前提需要有空间-->
<!-- android:shrinkColumns="1"第二个空间被压缩,前提是当前行被挤压到,注意:当前行太长可能整个空间不见-->
<TableLayout
android:shrinkColumns="1"
android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<TableRow>
<!-- android:layout_column="2"跳过几列去显示-->
<!-- android:layout_span="2"当前控件跨越几列去显示-->
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_column="2"
android:layout_span="2"
android:text="第一个">
</Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个"></Button>
</TableRow>
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个">
</Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个"></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个">
</Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个"></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个">
</TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个">
</Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个">
</Button>
</TableLayout>
GirdLayout网格布局
<!--android:orientation="vertical"水平还是竖直-->
<!--android:columnCount="3"若为水平,则最多几个控件,剩下自动换行-->
<!--android:rowCount="3"若为竖直,最。。。-->
<!--android:layout_columnWeight="1"
android:layout_rowWeight="1"横向、纵向权重-->
<!--android:layout_rowSpan="2"横向纵向跨几行几列-->
<?xml version="1.0" encoding="utf-8"?>
<GridLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第一个"></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="1"
android:layout_column="0"
android:layout_columnSpan="3"
android:layout_gravity="fill"
android:text="第二个"></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_row="0"
android:layout_column="1"
android:text="第三个"></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第四个"
android:layout_columnWeight="1"
android:layout_rowWeight="1"></Button>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第五个"
android:layout_columnWeight="1"></Button>
</GridLayout>
表格布局与网格布局的区别
tablelayout只能把两行进行合并
gridlayout可以把行合并,也可以把列合并,布局也会更加灵活
ConstraintLayout约束布局
直接在Split模式下操作
- 相对于父布局,用弹簧、四周圆点
- 控件之间对齐,圆点
- 右侧设置对应控件属性
- 辅助线:三角形时转换方向,显示对应方向距离;还有百分比的,可以用控件与辅助线之间关系(这一项很难转换,百分比未成功)
- 推导约束:Infer Constraints