5.1Android布局


本编文章和 下一篇文章结合在一起,本篇多为概念,下一篇多为实际代码

注:本篇文章往后,建议多找些代码练练。Android可以使用Java语言和Kotlin语言编译,后期交互代码以Java为编译基础,我不会Kotlin语言,Java学了一知半解。

  UI(User Interface)界面是人与手机之间传递数据、信息交互的重要媒介和对话窗口,是Android系统的重要组成部分。Android应用的所有UI组件都继承了View类,View类非常类似于Swing编程的JPanel,它代表一个空白的矩形区域
  UI界面大多使用XML文件控制,这几个XML属性大多都可以共用,控件之间也有自己的专属属性。

布局属性属性介绍
android:id为组件添加一个资源id,即标识符,可以通过id来找布局或控件
android:layout_width设置该子组件的布局宽度
android:layout_height设置该子组件的布局高度
android:layout_weight权重,按比例分配控件所占空间(可以使控件平均占据空间);通常会把分配该权重方向的layout_width设置为0dp,未设置0dp,则该控件会占据指定的宽度,然后加上根据权重来分配的空间,多用于布局管理器中的控件
android:background设置布局或控件的背景和颜色

  说明

  1. 设置id属性,不能是纯数字或者数字开头,只能是纯英文或者英文开头
  2. layout_width、和layout_height属性有3个属性值:fill_parent(已过时):指定子组件的高度、宽度与父容器组件得到高度、宽度相同(实际上减去填充的空白距离)。match_parentmatch_parentfill_parent 完全相同。从Android 2.2开始推荐使用这个属性值替代fill_parentwrap_contentwrap_content指定子组件大小恰好能包裹它的内容即可
  3. layout_weight:控件设置权重属性时,控件宽度(layout_width属性)不可设为wrap_content,应设置为0dp,这是一种规范,因为LinearLayout优先级比控件高,所以控件标签中layout_width属性会失去作用
  4. background属性值设置图片时,可以background:"@mipmap/abc",表示使用mipmap目录下的资源图片abc;设置颜色时,可以直接使用RGB码、自定义的颜色值(在res/values/colors.xml文件中定义)、安卓自带的颜色属性值

  一些控件的属性值也可以是数字,他们也有不同的单位,为了适应不同尺寸或者分辨率的手机屏幕

单位介绍
px像素,在屏幕中可以显示的最小元素单位,程序中任何控件都是由一个像素点组成。分辨率越高,屏幕的像素点就越多。使用px控制控件得大小,在分辨率不同的手机上控件得显示大小也会不同
pt磅数,一磅等于1/72英寸,一般pt会作为字体的单位来显示。pt和px的情况类似,在不同的分辨率手机上,用pt控件得字体大小也会不同
dp基于屏幕密度的抽象单位,不同设备有不同的显示效果,根据设备分辨率的不同来确定控件尺寸,推荐控件尺寸时使用
sp可伸缩像素,采用与dp相同的设计理念,推荐设置文字大小时使用

1.布局管理器的简述

     什么是布局?两张图片分别是微博的发现页面和首页页面,而屏幕上显示的所有东西,它们显示在整张页面的不同的位置,就就是布局,一个界面就是一个布局文件
     布局:在Android程序界面通过布局文件设定,每个应用程序创建时会默认包含一个主界面布局,布局位于res/layout目录中。
       在这里插入图片描述在这里插入图片描述
     什么是布局管理器?为了更好的管理Android应用的用户界面里的各组件,Android提供了布局管理器。通过使用布局管理器,Android应用的图形用户具有良好的平台无关性。推荐使用布局管理器来管理组件的分布、大小、而不是直接设置组件位置和大小。
     为了让组件在不同的手机屏幕上都能运行良好——不同手机屏幕的分辨率、尺寸并不完全相同,如果手动控制每个组件的大小、位置,则给编程带来了巨大的困难。为了解决这个问题,Android提供了布局管理器。布局管理器可以根据运行平台来调整组件的大小,我们要做的,只是为容器提供合适的布局管理器
     与Swing界面编程不同的时,Android的布局管理器本身就是一个UI组件,所有布局管理器都是ViewGroup的子类
在这里插入图片描述
     如图,所有布局都可作为容器类使用,因此可以调用多个重载的addView()向布局管理器中添加组件
     我们也可以用一个布局管理器嵌套到其它布局管理器中——因为布局管理器也继承了View,可以作为普通UI组件使用

2.布局管理器的创建

     之前的博客中,阐述了布局文件在res/layout目录下创建,activity_main.xml文件是默认创建了一个布局,当自己要新建一个布局管理器(布局文件)时,可以在这里新建一个布局文件
在这里插入图片描述

  1. 选中Layout文件夹,右键 > New > XML > Layout XML File
    在这里插入图片描述

  2. 创建成功
    在这里插入图片描述

  3. 查看代码与视图界面(Split
    在这里插入图片描述

3.布局管理器的分类

目前一共6种布局管理器:

3.1 线性布局(LinearLayout)

  特点:以水平或垂直方向排序
  定义:以水平或垂直的方式显示界面的控件:水平排列时,显示顺序从左到右;垂直排列时,显示顺序从上到下。
  线性布局会将容器里面的组件一个挨着一个排列起来,也可以设置枞向排列。通过android:orientation属性设置,当组件一个紧挨着一个排列到头之后,剩下的组件将不会被显示出来。

属性介绍
android:id为组件添加一个资源id,即标识符,可以通过id来找布局或控件
android:layout_width设置该子组件的布局宽度
android:layout_height设置该子组件的布局高度
android:layout_weight权重,按比例分配控件所占空间(可以使控件平均占据空间);通常会把分配该权重方向的android:layout_width设置为0dp,未设置0dp,则该控件会占据指定的宽度,然后加上根据权重来分配的空间,多用于布局管理器中的控件
android:background设置布局或控件的背景和颜色
android:orientation设置布局方向;horizontal水平排列;virtical垂直布局
android:gravity设置组件自身子元素的对齐方式;属性有topcenterbottomrightleftcenter_vercitalfill_vercitalfill_horizontalcenter_horizontalfillclip_verticalclip_horziontal,可以同时指定多个属性,例如 left|center_vertical 代表出现在屏幕左边,垂直居中
android:layout_margin外边距,布局或空间距离外部元素的边距;上下左右都是设定值
android:padding内边距,布局或控件距离内部元素的边距

3.2 相对布局(RelativeLayout)

  特点:通过相对定位排序
  定义:Android默认布局,通过相对定位指定控件位置,即以其它控件或父容器为参照物,摆放控件位置。相对布局要遵循控件之间的依赖关系,后放入的控件位置依赖于先放入的控件

属性介绍
android:id为组件添加一个资源id,即标识符,可以通过id来找布局或控件
android:layout_width设置该子组件的布局宽度
android:layout_height设置该子组件的布局高度
android:layout_weight权重,按比例分配控件所占空间(可以使控件平均占据空间);通常会把分配该权重方向的layout_width设置为0dp,未设置0dp,则该控件会占据指定的宽度,然后加上根据权重来分配的空间,多用于布局管理器中的控件
android:background设置布局或控件的背景和颜色

属性值为truefalse

属性介绍
android:layout_centerInParent当前控件位于父布局的中央位置
android:layout_centerVertical当前控件位于父布局的垂直居中位置(所在列的中间位置)
android:layout_centerHorizontal当前控件位于父控件的水平居中位置(所在行的中间位置)
android:layout_alignParentTop当前控件是否与父控件顶端对齐
android:layout_alignParentLeft当前控件是否与父控件左对齐
android:layout_alignParentRight当前控件是否与父控件右对齐
android:layout_alignParentBottom当前控件是否与父控件底端对齐

属性值必须为id的引用名“@id/name”

属性介绍
android:layout_above 设置当前控件位于某控件上方,位于上边那一行所在的列位置
android:layout_below 设置当前控件位于某控件下方,位于下边那一行所在的列位置
android:layout_toLeftOf设置当前控件位于某控件左侧,位于左边那一列所在的行位置
android:layout_toRightOf 设置当前控件位于某控件右侧,位于右边那一列所在的行位置
android:layout_alignTop 设置当前控件的上边界与某控件的上边界对齐
android:layout_alignBottom 设置当前控件的下边界与某控件的下边界对齐
android:layout_alignLeft 设置当前控件的左边界与某控件的左边界对齐
android:layout_alignRight 设置当前控件的右边界与某控件的右边界对齐

属性值为具体的像素值,如30dp,40px

属性介绍
android:layout_marginTop 当前控件上边界与某控件或父界面的距离;当前控件上边界与某控件的距离
android:layout_marginBottom当前控件底边界与某控件或父界面的距离;当前控件下边界与某控件的距离
android:layout_marginLeft 当前控件左边界与某控件或父界面的距离;当前控件左边界与某控件的距离
android:layout_marginRight当前控件右边界与某控件或父界面的距离;当前控件右边界与某控件的距离

3.3 帧布局(FrameLayout)

  特点:开辟空白区域,帧里的控件(层)叠加
  定义:帧布局是Android中最为简单的一种布局,该布局为每个加入其中的控件创建一个空白区域(称为一帧,每个控件占据一帧)。
  采用帧布局方式设计界面时,所有控件都默认显示在屏幕左上角,按照先后放入的顺序重叠摆放,先放入的控件显示在最底层,后放入的控件显示在最顶层。帧布局适用于图层设计,例如应用图标上信息提示数量。帧布局的大小由内部最大控件决定。

属性介绍
android:id为组件添加一个资源id,即标识符,可以通过id来找布局或控件
android:layout_width设置该子组件的布局宽度
android:layout_height设置该子组件的布局高度
android:layout_weight权重,按比例分配控件所占空间(可以使控件平均占据空间);通常会把分配该权重方向的layout_width设置为0dp,未设置0dp,则该控件会占据指定的宽度,然后加上根据权重来分配的空间,多用于布局管理器中的控件
android:background设置布局或控件的背景和颜色
android:foreground 设置帧布局容器的前景图像,始终在所有子控件之上
android:foregroundGravity 设置前景图像显示位置
android:layout_gravity 设置控件相对于父界面的位置

  说明

  1. layout_gravity的属性有:top顶端对齐,center居中对齐,bottom底部对齐,right右端对齐,center_vertical垂直列居中,center_horizontal水平行居中

3.4 表格布局(TableLayout)

  特点:表格形式排列
  

属性介绍
android:id为组件添加一个资源id,即标识符,可以通过id来找布局或控件
android:layout_width设置该子组件的布局宽度
android:layout_height设置该子组件的布局高度
android:layout_weight权重,按比例分配控件所占空间(可以使控件平均占据空间);通常会把分配该权重方向的layout_width设置为0dp,未设置0dp,则该控件会占据指定的宽度,然后加上根据权重来分配的空间,多用于布局管理器中的控件
android:background设置布局或控件的背景和颜色

布局属性:

属性介绍
android:stretchColumns 列被拉伸,父控件中定义,列号从“0”开始,“*”所有列拉伸,多个列号用“,”隔开
android:shrinkColumns列被收缩,父控件中定义,列号从“0”开始;“*”所有列收缩,多个列号用“,”隔开
android:collapseColumns 列被隐藏,父控件中定义,列号从“0”开始;“*”所有列隐藏,多个列号用“,”隔开

控件属性:

属性介绍
android:layout_column该单元显示位置,如“1”表示在第二个位置显示
android:layout_span 该单元格占据几列,默认为1行

3.5 绝对布局(AbsoluteLayout)

  特点:通过x,y坐标排列
  定义:通过指定x(横坐标)、y(纵坐标)坐标来控制每一个控件位置。绝对布局需要精确的计算空间大小,考虑手机屏幕尺寸和分辨率,在开发中不推荐使用。

属性介绍
android:id为组件添加一个资源id,即标识符,可以通过id来找布局或控件
android:layout_width设置该子组件的布局宽度
android:layout_height设置该子组件的布局高度
android:layout_weight权重,按比例分配控件所占空间(可以使控件平均占据空间);通常会把分配该权重方向的layout_width设置为0dp,未设置0dp,则该控件会占据指定的宽度,然后加上根据权重来分配的空间,多用于布局管理器中的控件
android:background设置布局或控件的背景和颜色
android:layout_x设置x坐标,横坐标
android:layout_y设置y坐标,纵坐标

3.6 网格布局(GridLayout)

  特点:将整个屏幕分成 行*列 的形式,每个网格上放一个组件
  定义:网格布局是在Android 4.0版本中提出的,网格布局管理器将屏幕划分为行、列和单元格,每个单元格放置一个组件,并且这个组件可以跨行或跨列摆放。
  网格布局管理器和表格布局管理器有些类似,都可以以行、列的形式管理放入其中的组件,但它们最大的不同就是网格布局管理器可以跨行显示组件,而表格布局管理器则不能

属性介绍
android:id为组件添加一个资源id,即标识符,可以通过id来找布局或控件
android:layout_width设置该子组件的布局宽度
android:layout_height设置该子组件的布局高度
android:layout_weight权重,按比例分配控件所占空间(可以使控件平均占据空间);通常会把分配该权重方向的layout_width设置为0dp,未设置0dp,则该控件会占据指定的宽度,然后加上根据权重来分配的空间,多用于布局管理器中的控件
android:background设置布局或控件的背景和颜色

布局属性:

属性介绍
android:rowCount 设置该网格容器的列数
android:columnCount 设置该网格容器的列数
android:alignmentMode设置该网格容器的对齐方式;
属性值:alignBounds对齐子视图边界;alignMargins对齐子视图内容
android:columnOrderPreserved 设置该网格容器是否保留列序号;默认true
android:rowOrderPreserved 设置该网格容器是否保留行序号;默认true
android:useDefaultMargins 设置网格布局管理器是否使用默认边距;默认true

子元素属性:

属性介绍
android:layout_gravity设置组件相对于网格容器的位置
android:layout_row设置组件在网格布局的行
android:layout_column设置组件在网格布局的列
android:layout_rowSpan设置组件占网格布局的行数;配合layout_gravity:fill属性使用有效
android:layout_columnSpan设置组件占网格布局的列数;配合layout_gravity:fill属性使用有效
android:layout_columnWeight设置列权重
android:layout_rowWeight设置行权重

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值