概述
布局
- 布局是Android应用程序的界面定义。
- 布局中所有界面元素,都是视图(View)对象或试图组(ViewGroup)对象。(视图是数据库的一个独立对象,是一个虚拟表)
- 一个布局首先是一个视图组对象,然后在视图组对象中添加子视图组对象或者视图对象。
布局的定义方式
可以通过两种方式来定义布局:XML定义和代码定义 - XML定义:运用Android Studio可以快速设计UI布局及包含的界面元素
- 代码定义:在Java或Kotlin代码中定义布局
- 在每个应用程序创建时会默认包含一个主界面布局,该布局位于res/layout目录中。
- 实际开发中每个应用程序都包含多个界面,而程序默认提供一个主界面布局无法满足需求,因此经常会在程序中添加多个布局。
布局的分类
布局的分类有约束布局、线性布局、帧布局、表格布局、绝对布局、相对布局等
常用布局有以下几种:
- 约束布局 : 通过相对定位排列
- 线性布局 : 以水平或垂直方向排列
- 帧布局 : 帧里的控件(层)叠加
- 表格布局 :表格形式排列
线性布局
线性布局(LinearLayout)主要以水平或垂直的方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次从上到下。线性布局中,每行或每列中只允许有一个子视图或控件。
LinewrLayout的最主要的属性有:
- android : gravity : 设置内部控件的显示位置。
- android :orientation :设置内部控件的排列方向,常量horizontal(默认值)表示水平排列,vertical表示垂直排列。
- android:layout_weight: 设置内部控件在LinearLayout中所占的权重。当控件使用权重属性时,布局宽度或高度属性值通常设置为0.
<Button
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:layout_weight = "2"/>
约束布局
约束布局ConstraintLayout是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。
- ConstraintLayout是Google在2016年的Google I/O大会上提出的一个可以灵活控制子控件的位置和大小的新布局。
- ConstraintLayout可以在不嵌套ViewGroup的情况下实现非常庞大、复杂的布局,实现扁平化。
- ConstraintLayout同时具有RelativeLayout和LinearLayout的有点、特点,功能强大。
- 使用ConstraintLayout来布局时性能比其他布局方式高。
- ConstraintLayout无论是通过布局管理器拖拽,鼠标控制的形式实现还是使用XML代码去写,都比较方便。
帧布局
帧布局是一种特殊的布局,它以层叠的方式显示布局中的多个控件
- 帧布局主要掌握以下以下两个属性的使用
1.android:layout_gravity
2.android:visibility
- 默认情况下,控件位于帧布局的左上角。可通过控件的android:layout_gravity属性控制其位置。
- android:layout_gravity属性可设置为下列值:
top//控件位于布局顶部
bottom//控件位于布局底部,单独使用时等价于"left|bottom"
left//控件位于布局左侧
right//控件位于布局右侧,单独使用时等价于"top|right"
center//控件位于布局中心
center_vertical//控件位于垂直方向上的中间位置,单独使用时等价于"left|center_vertical"
center_horizontal//控件位于水平方向上的中间位置,单独使用时等价于"top|center_horizontal"
- gravity的中文意思时“重心”就是表示view横向和纵向停靠的位置
- android:gravity是对控件本身来说的,是用来设置控件本身的内容应该显示在控件的什么位置,默认值是左侧,也可以用来设置布局中的控件位置
- android:layout_gravity:是相对于包含该控件的父控件来说的,设置该控件在父控件的什么位置
- android:visibility
View.VISIALBE//可见,显示到页面
View.INVISIABLE//不可见,但是还是占用位置
View.GONE//隐藏,不可见并且不占用位置
表格布局
表格布局(TableLayout)是以表格形式排列控件的,通过行和列将界面划分为多个单元格,每个单元格都可以添加控件
- 表格布局需要和TableRow配合使用,每一行都有TableRow对象组成,因此TableRow的数量决定表格的行数。而表格的列数是由包含最多的TableRow决定的,例如第一个TableRow有两个控件,第二个TableRow有三个控件,则表格列数为三
表格布局属性
布局属性 | 功能属性 |
---|---|
android:strechColumns | 设置该列被拉伸 |
android:shrinkC | 设置该列被拉伸 |
android:collapseColumns | 设置该列被隐藏 |
表格布局控件属性
控件属性 | 功能描述 |
---|---|
android:layout_span | 设置该单元格占据几列,默认为一列 |
android:layout_column | 设置该单元显示位置 |
相对布局
相对布局属性集锦:
相对于兄弟元素
android:layout_below="@id/aaa":在指定View的下方
android:layout_above="@id/xxx":在指定View的上方
android:layout_toLeftOf="@id/bbb":在指定View的左边
android:layout_toRightOf="@id/cccc":在指定View的右边
相对于兄弟元素
android:layout_below="@id/aaa":在指定View的下方
android:layout_above="@id/xxx":在指定View的上方
android:layout_toLeftOf="@id/bbb":在指定View的左边
android:layout_toRightOf="@id/cccc":在指定View的右边
相对于父元素
android:layout_alignParentLeft="true":在父元素内左边
android:layout_alignParentRight="true":在父元素内右边
android:layout_alignParentTop="true":在父元素内顶部
android:layout_alignParentBottom="true":在父元素内底部
对齐方式
android:layout_centerInParent="true":居中布局
android:layout_centerVertical="true":水平居中布局
android:layout_centerHorizontal="true":垂直居中布局
android:layout_alignTop="@id/xxx":与指定View的上边界一致
android:layout_alignBottom="@id/xxx":与指定View下边界一致
android:layout_alignLeft="@id/xxx":与指定View的左边界一致
android:layout_alignRight="@id/xxx":与指定View的右边界一致间隔
android:layout_marginBottom=""; 离某元素底边缘的距离
android:layout_marginLeft=""; 离某元素左边缘的距离
android:layout_marginRight ="";离某元素右边缘的距离
android:layout_marginTop=""; 离某元素上边缘的距离
android:layout_paddingBottom=""; 离父元素底边缘的距离
android:layout_paddingLeft=""; 离父元素左边缘的距离
android:layout_paddingRight ="";离父元素右边缘的距离
android:layout_paddingTop=""; 离父元素上边缘的距离
之后为android的简单控件https://blog.csdn.net/qq_44164791/article/details/104252517
Android的Activity(活动)https://blog.csdn.net/qq_44164791/article/details/104278506