Android布局基础知识

布局

布局的创建

UI(User Interface)界面是人与手机之间数据传递的、信息交互的重要媒介和对话窗口,是Android系统的重要组成部分。设计美观的UI界面布局是必不可少的组件。

布局的类型

Linear Layout(线型布局)、Relative Layout (相对布局)、Frame Layout(帧布局)、Table Layout(表格布局)、Absolute Layout(绝对布局)、Grid Layout(网格布局)

1.线性布局LinearLayout

线性布局在Android开发过程中会经常使用,它使用标签表示。介绍线性布局主要有两种形式,一种是水平线性布局,显示顺序依次为从左到右;一种是垂直线性布局,显示顺序依次为从上到下。
Orientation属性,用于控制控件的排列方向,该属性有vertical(垂直显示)和horizontal(水平显示)两个值
(注意:
当设置成垂直线性显示时,一行只能放一个控件,从上到下依次往下排,当排出窗体边缘以后将不再显示
当设置成水平线性显示时,一列只能放一个控件,从左到右依次往右排,当排出窗体边缘以后将不再显示)
表1-1 自身常用属性

android:orientation 设置排列方式
android:gravity 设置组件显示
android:layout_width 设置布局宽度
android:layout_height 设置布局高度


android:orientation=”vertical” 垂直线性布局
android:orientation=” horizontal” 水平线性布局
android:gravity=“center”//居中显示
android:gravity=“right|bottom”//居右下角显示”
android:layout_width=”wrap_content” 布局宽度包裹其自身内容
android:layout_width=” match_parent” 布局宽度与父窗体大小相同
android:layout_height=”wrap_content” 布局高度包裹其自身内容
android:layout_height=”match_parent” 布局高度与父窗体大小相同

注意
子组件属性 android:layout_weight属性,用于设置组件所占的权重,设置组件占父容器剩余空间的比例,默认值为0。(注意是占据剩余的空间)

2.相对布局RelativeLayout(要用一个参考点,根据组件间的相对位置进行控件摆放)

创建程序后默认就是相对布局,相对布局是通过相对定位的方式指定控件位置,即以其它控件或父容器为参照物,摆放控件位置。在设计相对布局时要遵循控件之间的依赖关系,后放入控件的位置依赖于先放入的控件。
表1-2 自身常用属性

android:gravity 设置各子组件的摆放位置
android:ignoreGravity 设置那个组件不受前面影响


android:gravity=“center” //组件居中显示
android:ignoreGravity=“@id/控件id名字”
//设置控件不受前面影响

相对布局内部类 RelativeLayout.LayoutParams提供的属性,用于设置控件的摆放位置

表1-3 子控件属性

android:layout_centerlnParent 设置当前控件位于父布局的中央位置
android:layout_centerVertical 设置当前控件位于父布局的垂直居中位置
android:layout_centerHorizontal 设置当前控件位于父布局的水平居中位置
android:layout_above 设置当前控件位于某控件上方
android:layout_below 设置当前控件位于某控件下方
android:layout_toLeftOf 设置当前控件位于某控件左侧
android:layout_toRightOf 设置当前控件位于某控件右侧
android:layout_alignParentLeft 设置当前控件是否与父控件左对齐
android:layout_alignParentRight 设置当前控件是否与父控件右对齐
android:layout_alignParentTop 设置当前控件是否与父控件顶端对齐
android:layout_alignParentBottom 设置当前控件是否与父控件底端对齐
android:layout_alignTop 设置当前控件的上边界与某控件的上边界对齐
android:layout_alignBottom 设置当前控件的下边界与某控件的下边界对齐
android:layout_alignLeft 设置当前控件的左边界与某控件的左边界对齐
android:layout_alignRight 设置当前控件的右边界与某控件的右边界对齐

表1-4 设置控件外边距属性

android:layout_marginTop 当前控件上边界与某控件的距离
android:layout_marginBottom 当前控件下边界与某控件的距离
android:layout_marginLeft 或android:layout_marginStart 当前控件左边界与某控件的距离
android:layout_marginRight 或android:layout_marginEnd 当前控件右边界与某控件的距离


android:layout_marginTop=“24dp” //设置顶端外边距24dp

表1-5 设置控件内边距属性

android:layout_paddingTop 设置布局顶部内边距的距离
android:layout_paddingBottpm 设置布局底部内边距的距离
android:layout_paddingLeft 或android:layout_paddingStart 设置布局左边内边距的距离
android:layout_paddingRight 或android:layout_paddingEnd 设置布局右边内边距的距离


android:layout_paddingBottpm=“16dp” //设置底端内边距16dp

拓展知识:空间的单位
为了让程序拥有更好的屏幕适配能力,设置控件的宽高最好是“match_parent”或“wrap_content”,避免设置固定值,防止控件相互挤压变形。在特殊情况下需要使用固定宽高时,可以选择px、pt、dp、sp四种单位。如android:layout_width=”24dp” // 指定值为24dp
px:代表像素,即在屏幕中可以显示的最小元素单位,应用程序中任何控件都是由一个像素点组成的。分辨率越高的手机,屏幕像素点就越多,用px控制控件的大小,在不同手机上控件显示的大小也不同。
pt:代表磅数,一磅等于1/72英寸,一般pt都不会作为字体的单位来显示。pt和px一样,不同手机控件大小不同。
dp:一种基于屏幕密度的抽象单位。不同设备有不同的显示效果,根据屏幕分辩率来确定控件的大小
sp:代表可伸缩像素,采用与dp相同的设计理念,推荐设置文字大小时使用

3.帧布局FrameLayout(用于显示层叠的内容和拖动的动画效果)

帧布局为每个加入其中的控件创建一个空白区域(称为一帧,每个控件占据一帧)。采用帧布局方式设计界面时,所有控件都默认显示在屏幕左上角,并按照先后放入的顺序重叠摆放,先放入的控件显示在最底层,后放入的控件显示在最顶层。帧布局的大小由内部最大控件的决定。

表1-6 常用属性

android:foreground 设置帧布局容器的前景图像(始终在所有子控件之上)
android:foregroundGravity 设置前景图像显示位置

注意:
前景图像:就是始终位于屏幕最上层的图像,不被其他图像盖住。默认显示整个屏幕

4.表格布局TableLayout

(以行列的形式显示控件,用TableRow容器控制行数,也可以不把控件放TableRow中,直接放TableLayout布局中)

注意:不能自动换行
表格布局是让控件以表格的形式来排列组件的,只要将组件或信息放在单元格中,组件就可以整齐的排列,这是表格布局的特点。
在TableLayout中,行数由TableRow对象控制,即布局中有多少TableRow对象,就有多少行。每个TableRow中可以放置多个组件。

表1-7 常用属性

android:stretchColumns 设置列可被拉伸,列号从“0”开始
android:shrinkColumns 设置列可被收缩,列号从“0”开始
android:collapseColumns 设置列可被隐藏,列号从“0开始


android:stretchColumns=“0”//第1列拉伸
android:shrinkColumns=“1,2”//第2,3列可收缩
android:collapseColumns=“0”//第1列隐藏

表1-8 表格布局子组件常用属性,用于设置控件的显示位置,占据行数

android:layout_column 设置控件显示第几列的位置,下标从0开始
android:layout_span 设置控件占据几列,默认一行


android:layout_column=“1” //表示在第2个位置显示

5.网格布局 GridLayout

Android4.0推出的,在网格布局管理器中用虚拟的细线划分行列和单元格(单元格可以跨行和跨列显示,超出边缘后可以自动换行

表1-9 常用属性

android:columnCount 指定网格最大列数
android:orientation 设置排列方式
android:rowCount 指定网格最大行数


android:columnCount=“2”//最大列数为2列
android:rowCountt=“2”//最大行数为2行

控制各子组件的分布方式提供一个内部类 GridLayout.LayoutParams

表1-10 子组件常用属性

android:layout_column 子组件位于网格的第几列的
android:layout_columnSpan 设置子组件横向跨几列的
android:layout_columnWeight 设置子组件水平方向上的权重
android:layout_gravity 设置子组件采用什么方式占用网格空间
android:layout_row 子组件位于网格的第几行
android:layout_rowSpan 设置子组件纵向跨几行的
android:layout_rowWeight 设置子组件垂直方向上的权重


android:layout_column=“0”//位于第一列
android:layout_columnSpan=“2”//跨两列显示
android:layout_gravity=“fill”//填充控件
android:layout_row=“0” //位于第一行
android:layout_rowSpan=“2”//跨两行显示

6.绝对布局 AbsoluteLayout

绝对布局(AbsoluteLayout)是通过指定x、y坐标来控制每一个控件位置的。但是在GoogleAPI中提示此类已弃用,可使用FrameLayout,RelativeLayout代替它。

表1-11 设置控件位置属性

android:layout_x 设置x坐标
android:layout_y 设置y坐标

7.布局管理器的嵌套

原则
1.根布局管理器必须包含xmlns属性
2.在一个布局文件中,最多只能有一个根布局管理器,如果需要有多个还需要使用一个根布局管理器将它们括起来
3.不要嵌套太深,如果嵌套太深,则会影响性能

发布了3 篇原创文章 · 获赞 3 · 访问量 69

猜你喜欢

转载自blog.csdn.net/qq_45844792/article/details/105009559