目录
在Android开发中,布局(res-->layout)是一种定义用户界面(UI)的XML文件,它作为视图对象(View)和视图组(ViewGroup)的容器,用来确定应用界面的结构。
☛ ☛☛布局是一个ViewGroup,理解其Parent与child的关系
通用属性 | |
---|---|
属性 | 描述 |
layout_width layout_height | 自身的尺寸:固定像素值 / wrap_content(自适应子视图的大小)/ match_parent(匹配父容器的大小) |
background | 背景色,16进制值 或 图片 |
id | 唯一标识符(必须唯一),用于定位该控件,例如:@id/titletv |
padding | 内边距 |
组合方式:padding_left、padding_right | |
margin | 外边距 |
visibility | visible:显示;invisible:不显示但是占用空间;gone:不显示也不占用空间 |
focusable | 是否可以获取焦点 |
enabled | 是否启用该控件 |
一、 LinearLayout(线性布局)
orientation | 线性布局的方向:vertical(垂直)或horizontal(水平) |
gravity | 内部的对齐方式 :center、left、right、top和bottom |
组合方式:center|left、center|right、center|top、center|bottom | |
weight | 3个水平的控件,权重若都为1,则平分总宽度 |
二、 RelativeLayout(相对布局)
一种根据父容器和兄弟控件来确定位置的布局方式
alignParent | 根据父容器定位 | |
---|---|---|
属性 | 和父容器 | |
alignParentLeft / alignParentRight | 左边对齐 / 右边对齐 | |
alignParentTop / alignParentBottom | 顶部对齐 / 底部对齐 |
根据兄弟控件定位 | |
---|---|
属性 | 和兄弟控件 |
aligntLeft / alignRight | 左边对齐 / 右边对齐 |
alignTop / alignBottom | 顶部对齐 /底部对齐 |
below / above | 下方 / 上方 |
toLeftOf / toRightOf | 左侧 / 右侧 |
center | 属性 | 描述 |
---|---|---|
centerHorizontal | 水平居中 | |
centerVertical | 垂直居中 | |
centerInParent | 水平垂直居中(中间) |
三、 FrameLayout(帧布局)
多个视图按照添加顺序堆叠,后面覆盖前面。适用于层叠显示场景,例如对话框、菜单等。
foreground: | 在FrameLayout的内容之上绘制一个可绘制的对象(如图片、颜色) 这常用于在内容上方添加一个遮罩层或装饰层。 |
foregroundGravity: | 定义了由foreground属性指定的前景内容的对齐方式。 其可选值与layout_gravity相似,用于控制前景内容在FrameLayout中的布局位置。 |
measureAllChildren: | 布尔类型,为true时,即使子视图在最终布局中会被其他视图覆盖,FrameLayout也会测量所有子视图的大小。 |
四、 Constraint Layout(约束布局)
Android Studio推荐的现代布局方式,它凭借强大的约束条件功能,能够精确地定义控件的位置和大小,轻松构建复杂的界面结构。其高效性和灵活性使得布局嵌套大幅减少,从而提升了界面性能。
layout_constraintLeft_toLeftOf:使当前控件的左边缘与指定控件的左边缘对齐。
layout_constraintRight_toRightOf:使当前控件的右边缘与指定控件的右边缘对齐。
layout_constraintTop_toTopOf:使当前控件的上边缘与指定控件的上边缘对齐。
layout_constraintBottom_toBottomOf:使当前控件的下边缘与指定控件的下边缘对齐。
layout_constraintBaseline_toBaselineOf:使当前控件的基线与指定控件的基线对齐。
layout_constraintHorizontal_bias:控制水平方向上控件的偏移量,值域为0~1,表示当前控件在其约束范围内的水平位置百分比。
layout_constraintVertical_bias:控制垂直方向上控件的偏移量,值域为0~1,表示当前控件在其约束范围内的垂直位置百分比。
五、Table Layout(表格布局)
现代Android开发很少使用
TableLayout | Android Developers
和 GridLayout(网格布局) 的区别:
GridLayout 只能制定每一列宽度一样的表格布局,
TableLayout 能够制定各列宽度不一样的表格布局
1.常用属性
属性 | 功能 | 备注 |
layout_width | 宽 | 默认fill_parent的,自定义不会生效 |
layout_height | 高 | 默认wrap_content的,可以自定义 |
collapseColumns | 隐藏/折叠列 |
|
shrinkColumns | 收缩列 | |
stretchColumns | 拉伸列 | |
layout_column | 跳格子 | android:layout_column="2": 表示的跳过第二个,直接显示到第三个格子处,从1开始算的! |
layout_span | 合并 | android:layout_span="4": 表示合并4个单元格,也就说这个组件占4个单元格 |
注意:
- 整个表格布局的宽度取决于父容器的宽度(占满父容器本身)
- 直接向TableLayout中添加组件的话,那么这个组件将占满一行
- 一行多控件:TableRow容器,组件个数就决定了该行有多少列,而列的宽度由该列中最宽的单元格决定
2.使用实例
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
tools:context=".learn_layout.TableActivity">
<TableLayout
android:layout_width="fill_parent"
android:layout_height="300dp"
android:layout_marginHorizontal="12dp"
android:background="#A0DF56"
android:gravity="center"
android:stretchColumns="1">
<!--第一行-->
<TableRow>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="(1,1)" />
…………
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/shape_15"
android:text="(1.5)" />
</TableRow>
<!--第二行-->
<TableRow>
…………
</TableRow>
</TableLayout>
</RelativeLayout>
六、Absolute Layout(绝对布局)
绝对布局简单,但因其多端兼容性差,使用的地方很少,所以只需要了解即可。
layout_x / layout_y | 组件的X坐标 / 组件的Y坐标 |
演示:登录注册界面
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="40dp"
android:layout_y="350dp"
android:text="账号: "
android:textSize="30sp" />
<EditText
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_x="110dp"
android:layout_y="350dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_x="40dp"
android:layout_y="420dp"
android:text="密码: "
android:textSize="30sp" />
<EditText
android:layout_width="250dp"
android:layout_height="50dp"
android:layout_x="110dp"
android:layout_y="420dp" />
<Button
android:layout_width="150dp"
android:layout_height="50dp"
android:layout_x="40dp"
android:layout_y="500dp"
android:text="登录" />
<Button
android:layout_width="150dp"
android:layout_height="50dp"
android:layout_x="210dp"
android:layout_y="500dp"
android:text="注册" />
</AbsoluteLayout>