五种常用布局
文章目录
1.线性布局
线性布局(LinearLayout)主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<!--orientation 方向-->
<!-- 注意:当控件使用weight权重属性时,布局宽度属性值通常设置为0。 -->
<Button android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" android:text="按钮一" />
<Button android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" android:text="按钮二" />
</LinearLayout>
- 当控件水平排列时,控件属性layout_width只能设置为wrap_content(包裹内容让当前控件根据控件内容大小自动伸缩),否则其余控件会被挤出屏幕右侧不显示。同理,如果控件垂直排列也会出现同样情况。
- 当控件水平排列时,如果控件未占满一行,会留有空白区域,这样既不美观又浪费空间。此时,可以利用layout_weight属性解决这个问题,该属性被称为权重,通过比例调整布局中所有控件的大小。
2.相对布局
相对布局(RelativeLayout)是通过相对定位的方式指定控件位置,即以其它控件或父容器为参照物,摆放控件位置。在设计相对布局时要遵循控件之间的依赖关系,后放入控件的位置依赖于先放入的控件。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="20dp">
……..
</RelativeLayout>
控件位置属性
android:layout_centerInParent | 设置当前控件位于父布局的中央位置 |
---|---|
android:layout_centerVertical | 设置当前控件位于父布局的垂直居中位置 |
android:layout_centerHorizontal | 设置当前控件位于父控件的水平居中位置 |
android:layout_above | 设置当前控件位于某控件上方 |
android:layout_below | 设置当前控件位于某控件下方 |
android:layout_toLeftOf | 设置当前控件位于某控件左侧 |
android:layout_toRightOf | 设置当前控件位于某控件右侧 |
android:layout_alignParentTop | 设置当前控件停靠于布局顶端(默认) |
android:layout_alignParentLeft | 设置当前控件停靠于布局左侧(默认) |
android:layout_alignParentRight | 设置当前控件停靠于布局右侧 |
android:layout_alignParentBottom | 设置当前控件停靠于布局底端 |
android:layout_alignTop | 设置当前控件的上边界与某控件的上边界对齐 |
android:layout_alignBottom | 设置当前控件的下边界与某控件的下边界对齐 |
android:layout_alignLeft | 设置当前控件的左边界与某控件的左边界对齐 |
android:layout_alignRight | 设置当前控件的右边界与某控件的右边界对齐 |
android:layout_marginTop | 设置当前控件上边界与某控件的距离 |
---|---|
android:layout_marginBottom | 设置当前控件底边界与某控件的距离 |
android:layout_marginLeft | 设置当前控件左边界与某控件的距离 |
android:layout_marginRight | 设置当前控件右边界与某控件的距离 |
android:paddingTop | 设置布局顶部内边距的距离 |
---|---|
android:paddingBottom | 设置布局底部内边距的距离 |
android:paddingLeft | 设置布局左边内边距的距离 |
android:paddingRight | 设置布局右边内边距的距离 |
android:padding | 设置布局四周内边距的距离 |
补充属性
android:layout_gravity和android:gravity属性的区别
gravity的中文意思就是”重心“,就是表示view横向和纵向的停靠位置
(1).android:gravity:是对view控件本身来说的,是用来设置view本身的内容应该显示在view的什么位置,默认值是左侧。也可以用来设置布局中的控件位置
(2).android:layout_gravity:是相对于包含改元素的父元素来说的,设置该元素在父元素的什么位置;
比如TextView: android:layout_gravity表示TextView在界面上的位置,android:gravity表示TextView文本在TextView的什么位置,默认值是左侧.
android:gravity : 表示当前View,即**控件,内部的东西的,对齐****方式。
android:layout_gravity: 表示当前View,即控件本身,在父一级内的(即父一级控件所给当前子控件所分配的显示范围内)的对齐方式
常用单位
为了让程序拥有更好的屏幕适配能力,在指定控件和布局宽高时应尽量避免将控件宽高设置为固定值。但特殊情况下,需要使用指定宽高值时,可以选择使用以下四种单位:
px:像素,即在屏幕中可以显示最小元素单位。
pt:磅数,一磅等于1/72英寸,一般pt会作为字体的单位来显示。
dp:基于屏幕密度的抽象单位。不同设备有不同的显示效果,根据设备分辨率的不同来确定控件的尺寸。
sp:可伸缩像素,采用与dp相同的设计理念,推荐设置文字大小时使用。
3.帧布局
帧布局(FrameLayout)为每个加入其中的控件创建一个空白区域(称为一帧,每个控件占据一帧)。
所有控件都默认显示在屏幕左上角,按照先后放入的顺序重叠摆放。帧布局的大小由内部最大控件的决定。
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:foreground="@mipmap/ic_launcher" android:foregroundGravity="left" >
</FrameLayout>
4.表格布局
表格布局(TableLayout)是以表格形式排列控件的,通过行和列将界面划分为多个单元格,每个单元格都可以添加控件。
表格布局需要和TableRow配合使用,每一行都由TableRow对象组成,因此TableRow的数量决定表格的行数。而表格的列数是由包含最多控件的TableRow决定的,例如第1个TableRow有两个控件,第2个TableRow有三个控件,则表格列数为3。
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:stretchColumns="2">
<TableRow>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_column="0" android:text="按钮1" />
</TableRow>
</TableLayout>
5.绝对布局
绝对布局(AbsoluteLayout)是通过指定x、y坐标来控制每一个控件位置的。
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_x="50dp" android:layout_y="50dp" android:text="按钮1"/>
</AbsoluteLayout>