安卓7大基本布局

article/2025/9/28 0:56:00

一:基础知识

1.Android七大基本布局分别是:

LinearLayout(线性布局)、TableLayout(表格布局)、RelativeLayout(相对布局)、FrameLayout(层布局)、AbsoluteLayout(绝对布局)、GridLayout(网格布局)、ConstraintLayout(约束布局)。

2.七大基本布局的继承关系

 上面这个类图只是说了六大基本布局的关系,当然ViewGroup还有其他一些布局管理器。

3.Android布局的XML关系图:

二:布局介绍

1.LinearLayout(线性布局)

线性布局具有垂直方向与水平方向的布局方式,通过设置属性 “android:orientation” 控制方向,属性值:垂直(vertical)和水平(horizontal),默认水平方向。

android:gravity:内部控件对齐方式,常用属性值:center、center_vertical、center_horizontal、top、bottom、left、right等。android:gravity在布局组件 RelativeLayout、TableLayout 中也有使用,在 FrameLayout、AbsoluteLayout 则没有这个属性。

center:居中显示,这里并不是表示显示在 LinearLayout 的中心,当 LinearLayout 线性方向为垂直方向时,center 表示水平居中,但是并不能垂直居中,此时等同于 center_horizontal 的作用;同样当线性方向为水平方向时,center 表示垂直居中,等同于 center_verticaltop、bottom、left、right 顾名思义为内部控件居顶、低、左、右布局。

这里要与 android:layout_gravity 区分开,layout_gravity 是用来设置自身相对于父元素的布局。

android:layout_weight:权重,用来分配当前控件在剩余空间的大小。使用权重一般要把分配该权重方向的长度设置为零,比如在水平方向分配权重,就把 width 设置为零。

2.RelativeLayout(相对布局)

相对布局可以让子控件相对于兄弟控件或父控件进行布局,可以设置子控件相对于兄弟控件或父控件进行上下左右对齐。

RelativeLayout能替换一些嵌套视图,当我们用 LinearLayout 来实现一个简单的布局但又使用了过多的嵌套时,就可以考虑使用RelativeLayout重新布局。(过多嵌套会导致性能变差)

RelativeLayout中子控件常用属性:

1、相对于父控件,例如:android:layout_alignParentTop=“true”

android:layout_alignParentTop控件的顶部与父控件的顶部对齐
android:layout_alignParentBottom控件的底部与父控件的底部对齐
android:layout_alignParentLeft控件的左部与父控件的左部对齐
android:layout_alignParentRight控件的右部与父控件的右部对齐

2、相对给定Id控件,例如:android:layout_above=“@id/**”

android:layout_above控件的底部置于给定ID的控件之上
android:layout_below控件的底部置于给定ID的控件之下
android:layout_toLeftOf控件的右边缘与给定ID的控件左边缘对齐
android:layout_toRightOf控件的左边缘与给定ID的控件右边缘对齐
android:layout_alignBaseline控件的baseline与给定ID的baseline对齐
android:layout_alignTop控件的顶部边缘与给定ID的顶部边缘对齐
android:layout_alignBottom控件的底部边缘与给定ID的底部边缘对齐
android:layout_alignLeft控件的左边缘与给定ID的左边缘对齐
android:layout_alignRight控件的右边缘与给定ID的右边缘对齐

3、居中,例如:android:layout_centerInParent=“true”

android:layout_centerHorizontal水平居中
android:layout_centerVertical垂直居中
android:layout_centerInParent父控件的中央

3.FrameLayout(层布局)

帧布局或叫层布局,从屏幕左上角按照层次堆叠方式布局,后面的控件覆盖前面的控件。

该布局在开发中设计地图经常用到,因为是按层次方式布局,我们需要实现层面显示的样式时就可以采用这种布局方式,在普通功能的软件设计中用得也不多。

4.AbsoluteLayout(绝对布局)

绝对布局也叫坐标布局,指定控件的绝对位置,简单直接,直观性强,但是手机屏幕尺寸差别较大,适应性差,Android 1.5已弃用,可以用RelativeLayout替代。

5.TableLayout(表格布局)

表格布局继承自LinearLayout,通过TableRow设置行,列数由TableRow中的子控件决定,直接在TableLayout中添加子控件会占据整个一行。

TableLayout常用属性:

android:shrinkColumns设置可收缩的列,内容过多就收缩显示到第二行
android:stretchColumns设置可伸展的列,将空白区域填充满整个列
android:collapseColumns设置要隐藏的列

列的索引从0开始,shrinkColumns和stretchColumns可以同时设置。

子控件常用属性:

android:layout_column第几列
android:layout_span占据列数

6.GridLayout(网格布局)

android 4.0 后新增的一个布局,与前面介绍过的 TableLayout(表格布局) 其实有点大同小异,不过新增了一些新的功能:

1.跟LinearLayout(线性布局)一样,他可以设置容器中组件的对齐方式

2.容器中的组件可以跨多行也可以跨多列(相比 TableLayout 直接放组件,占一行相比较)

常用属性:

排列对齐:

设置组件的排列方式android:orientation=""vertical(竖直,默认)或者horizontal(水平)
设置组件的对齐方式android:layout_gravity=""center,left,right,buttom

设置布局为几行几列:

设置有多少行android:rowCount="4"设置网格布局有4行
设置有多少列android:columnCount="4设置网格布局有4列

设置某个组件位于几行几列 注意:都是从0开始算的~~~

组件在第几行android:layout_row = "1"设置组件位于第二行
组件在第几列android:layout_column = "2"设置该组件位于第三列

设置某个组件横跨几行几列以及填充:

横跨几行android:layout_rowSpan = "2"纵向横跨2行
横跨几列:android:layout_columnSpan = "3"横向横跨2列
填充满跨越的行或列android:layout_gravity = "fill"填充

7.ConstraintLayout(约束布局)

传统的Android开发当中,界面基本都是靠编写XML代码完成的,虽然Android Studio也支持可视化的方式来编写界面,但是操作起来并不方便,我也一直都不推荐使用可视化的方式来编写Android应用程序的界面。而ConstraintLayout就是为了解决这一现状而出现的。它和传统编写界面的方式恰恰相反,ConstraintLayout非常适合使用可视化的方式来编写界面,但并不太适合使用XML的方式来进行编写。当然,可视化操作的背后仍然还是使用的XML代码来实现的,只不过这些代码是由Android Studio根据我们的操作自动生成的。另外,ConstraintLayout 还有一个优点,它可以有效地解决布局嵌套过多的问题。我们平时编写界面,复杂的布局总会伴随着多层的嵌套,而嵌套越多,程序的性能也就越差。ConstraintLayout则是使用约束的方式来指定各个控件的位置和关系的,它有点类似于 RelativeLayout,但远比RelativeLayout要更强大。

注意:ConstraintLayout 向下兼容到 API 9

常用特性:例如:app:layout_constraintTop_toBottomOf="@+id/***"

layout_constraintTop_toTopOf将所需视图的顶部与另一个视图的顶部对齐
layout_constraintTop_toBottomOf将所需视图的顶部与另一个视图的底部对齐
layout_constraintBottom_toTopOf将所需视图的底部与另一个视图的顶部对齐
layout_constraintBottom_toBottomOf将所需视图的底部与另一个视图的底部对齐
layout_constraintLeft_toLeftOf将所需视图的左边与另一个视图的左边对齐
layout_constraintLeft_toRightOf将所需视图的左边与另一个视图的右边对齐
layout_constraintRight_toLeftOf将所需视图的右边与另一个视图的左边对齐
layout_constraintRight_toRightOf将所需视图的右边与另一个视图的右边对齐

三:性能介绍

以最常用的LinearLayout(线性布局)、RelativeLayout(相对布局)来举例子。

很简单就一句话:在简单布局可以用单层 LinearLayout 完成的布局我们可以选择 LinearLayout 进行布局,如果用单层 LinearLayout 完成不了而要嵌套的话,那么我们可以考虑用 RelativeLayout 来完成布局。

注意:当 LinearLayout 设置了 weight 的时候,会进行二次测量,在第二次测量的时候父视图会把剩余的宽度按照 weight 值的大小平均分配给相应的子视图,这样就会浪费性能了~~~所以尽量不要用吧~~~

四:原理介绍

原理相关的,我这里简单说一下步骤~~

1.测量

2.布局

3.绘制

UI的绘制原理,总的来说就是这三个步骤,我这里先不展开详细说明了,想了解相关内容的,可以看:UI绘制流程及原理_qinbin2015的博客-CSDN博客 这篇博客,写的很详细~~~


http://chatgpt.dhexx.cn/article/Jq2P8cxN.shtml

相关文章

Android的六大基本布局

线性布局 LinearLayout相对布局 RelativeLayout表格布局 TableLayout绝对布局 AbsoluteLayout网格布局 GridLayout帧布局 FrameLayout 布局通用属性 属性名称功能描述android:id设置布局的标识android:layout_width设置布局的宽度android:layout_height设置布局的高度android:…

安卓布局详解:探索各种布局方式

文章目录 前言一、线性布局(LinearLayout)二、相对布局(RelativeLayout)三、帧布局(FrameLayout)四、表格布局(TableLayout)五、约束布局(ConstraintLayout)六…

微信小程序页面布局——上中下结构

小程序页面布局——上中下结构 内容简述 上中下结构:头脚固定中间滚动框 使用UI框架:Vant Weapp(引入安装参考) 为了方便,使用了less生成wxss,所以展示的是less代码,有需要可以看:https://www.jianshu.com…

微信小程序中的常用布局方式(总结)

参照Android开发,总结了微信小程序的常用的两种布局方式:1、线性布局(横版、竖版)。2、网格布局。 效果图如下: 一、网格布局 (1)固定Item个数的网格布局,主要用于功能模块入口展示…

微信小程序页面布局

一,微信小程序页面布局方式采用的是Flex布局 1.Flex布局,是W3c在2009年提出的一种新的方案,可以简便,完整,响应式的实现各种页面布局。 2.Flex布局提供了元素在容器中的对齐,方向以及顺序,甚至他们可以是动…

html的网格布局

网格布局 学习总结: 从7.19进入csdn夏令营后,感谢各位老师的辛苦讲解与发布任务,我对C1能力认证中web方面的知识有了极大的领会。学习过程中既温习了在校学习的知识,也学到了诸如网格布局,动画,less&#x…

网格布局(grid布局)

网格布局 他可以将页面分为多个网格,可以任意组合不同的网格 ,做出各种各样的布局。 网格布局为二维性质的。 设置行、列间距 grid-row-gap:1rem ;行间距 ** grid-column-gap: 1rem ;列间距** ** grid-gap: 1rem;**设置行列间距 设置容器的列宽和与…

CSS布局—网格布局Grid(一)

CSS网格可以定义由行和列组成的二维布局,然后将元素放置到网格中。有些元素可能只占据网格的一个单元,另一些元素则可能占据多行或多列。网格的大小既可以精确定义,也可以根据自身内容自动计算。你既可以将元素精确地放置到网格某个位置&…

CSS Grid 网格布局教程

一、概述 网格布局(Grid)是最强大的 CSS 布局方案。 它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。以前,只能通过复杂的 CSS 框架达到的效果,现在浏览器内置了。 上图这样的布局&…

css 网格布局

简介: 网格是由一系列水平及垂直的线构成的一种布局模式。一个网格通常具有许多的列(column)与行(row),以及行与行、列与列之间的间隙,这个间隙一般被称为沟槽(gutter)。…

微信小程序的页面布局(1)

微信小程序的页面布局主要用到两个文件,wxml(摆放各种组件)和wxss(设计排版) 因此,我们首先将要用到的组件按照一定的组织排序扔进wxml文件里,什么叫组织排序呢,这里注意就是组件与组…

微信小程序~利用模板实现《福利》页面的网格布局

什么是模板? 在微信小程序中,使用template来表示模板 为什么要使用模板? 使用模板文件能够降低代码重构,提高代码的复用性。 如何使用? 页面内使用:在页面内直接声明一个template并且引用代码如下&#xf…

【HTML/CSS】网格布局小案例

代码如下&#xff08;可以改动精简一些&#xff0c;我不想改了&#xff0c;改一下估计50行就够了&#xff09;&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compati…

微信小程序第三天(布局:栅格布局)

我根据微信小程序的特点弄了一套简单的栅格布局。 .row {display: block;margin: 0px; }.col {display: flex;font-family: -apple-system-font, "Helvetica Neue", sans-serif;font-size: 17px; }.col>.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7,…

HTML5 网页栅格布局

栅格布局&#xff1a;也称为网格系统&#xff0c;运用固定的格子设计版面布局。 Demo <!DOCTYPE HTML> <html><head><meta charset"UTF-8"/><title>栅格布局</title><style type"text/css">/*清空所有标签外边…

小程序宫格布局

之前写小程序的时候用了iview的宫格&#xff0c;好像跳过了很多要自己写的坑&#xff0c;今天测试了下&#xff0c;总结一下方法。注意小程序中flex和grid的用法有很多不一眼&#xff01;小心甄别&#xff01; 1.使用iview 去iview weapp github 引入index.json {"us…

Grid 布局 - 网格布局

目录 一、什么是Grid布局 二、容器属性值 2.1 grid-template-rows和grid-template-columns 2.1.1 grid-template-columns 2.1.2 grid-template-rows 2.2 row-grap和column-grap 2.2.1 row-grap 2.2.2 column-grap 2.3 grid-template-area 2.4 grid-auto-flow 2.5 just…

微信小程序----Grid(九宫格)(flex实现九宫格布局)

效果二维码 效果图 WXML <view class"section"><view class"tui-table-view"><view class"tui-col-3"><icon class"iconfont icon-shouye"></icon><view>Home</view></view><vie…

前端网格布局grid

网格布局 <style> .container {border:none;display: grid;height: 600px;grid-template-columns: 200px 1fr; /*两列&#xff0c;第一列200px&#xff0c;第二列自适应*/grid-template-rows: 50px 1fr 30px; /*三行&#xff1a;第一行&#xff1a;50px,第二行&#…

css【详解】grid布局—— 网格布局(栅格布局)

网格布局&#xff08;Grid&#xff09;是最强大的 CSS 布局方案 grid布局 和 flex布局的区别 Flex 布局是轴线布局&#xff0c;只能指定"项目"针对轴线的位置&#xff0c;可以看作是一维布局。 Grid 布局则是将容器划分成"行"和"列"&#xff0c…