安卓页面的布局和生命周期(新手村第三篇) - 详解

目录

1、布局简介

(1)布局的通用属性

(2)LinearLayout(线性布局)

(3)RelativeLayout(相对布局)

(4)TableLayout(表格布局)

a、TableLayout 布局常用属性

b、TableLayout中控件常用属性

(5)FrameLayout(帧布局)

(6)ConstraintLayout(约束布局)

相对定位

居中定位和倾向

chain(链)

2、生命周期

(1)Activity文件内容:

(2)Activity 的7个回调方法:


1、布局简介

在安卓项目中,一般分为布局文件和代码文件,布局文件就是我们的 xml 文件,而代码文件就是我们常说的 Activity。

安卓常用的就是5种布局:LinearLayout(线性布局)、RelativeLayout(相对布局)、FrameLayout(帧布局)、TableLayout(表格布局)和ConstraintLayout(约束布局)。

(1)布局的通用属性

属性名称描述
android:id

设置布局的唯一标识。

在XML文件中它的属性值是通过“@+id/属性名称”定义的。为布局指定android:id 属性后,在R.java文件中,会自动生成对应的int值。在Java代码中通过为findViewById()方法传入该int值来获取该布局对象。

android:layout_width

设置布局的宽度。

(1)fill_parent: 表示该布局的宽度与父容器(从根元素讲是屏幕)的宽度相同。
(2)match_parent:与fill_parent的作用相同,从Android 2.2开始推荐使用match_parent。
(3)wrap_content:表示该布局的宽度恰好能包裹他的内容。

android:layout_height

设置布局的高度。

(1)fill_parent: 表示该布局的宽度与父容器的高度相同。
(2)match_parent:与fill_parent的作用相同,从Android 2.2开始推荐使用match_parent。
(3)wrap_content:表示该布局的高度恰好能包裹他的内容。

android:background设置布局的背景,其值可以引用图片资源,也可以是颜色资源。
android:layout_margin

设置当前布局与屏幕边界或与周围控件的距离。

属性值为具体的尺寸,如50dp。与之相似的还有android:layout_marginTop、android:layout_marginBottom、android:layout_marginLeft、android:layout_marginRight属性,分别用于设置当前布局与屏幕、周围布局或者控件的上下左右边界的距离。

android:padding

设置当前布局与该布局中控件的距离。其值可以是具体的尺寸,如50dp。与之相似的还有android:paddingTop、android:paddingBottom、android:paddingLeft、android:paddingRight属性,分别用于设置当前布局中控件与该布局上下左右的距离。

需要注意的是,Android系统提供的五种常用布局必须设置android:layout_widthandroid:layout_height属性指定其宽高,其他的属性可以根据需求进行设置。

android:gravity设置当前 View 内部子元素(或内容)的对齐方向。
android:layout_gravity设置某个 View 的对齐方向。

(2)LinearLayout(线性布局)


线性布局中子控件的属性

属性名称描述
android: orientation设置布局内控件的排列顺序,其可选值为 vertical 和 horizontal
vertical:表示LinearLayout布局内控件依次从上到下竖直排列。
horizontal:表示LinearLayout布局内控件依次从左到右水平排列。
android: layout_weight在布局内设置控件权重,该属性被称为权重,属性值可直接写int值。通过设置该属性值,可使布局内的控件按照权重比显示大小,在进行屏幕适配时起到关键作用。
andriod:divider列表类控件和容器类控件支持分割线属性,需要配合android:dividerHeight、android:showDividers和android:dividerPadding使用;ConstraintLayout、RelativeLayout、FrameLayout不支持。

(3)RelativeLayout(相对布局)

RelativeLayout(相对布局)是通过相对定义的方式指定子控件的位置。XML标签格式如下:


相对布局中子控件的属性

属性描述
android: layout_centerParent设置当前控件位于父布局的中央位置
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设置当前控件的右边界与某控件的右边界对齐

(4)TableLayout(表格布局)

使用行和列管理布局中的控件,不需要声明行数和列数,而是在布局中加入控件来控制。



......

TableLayout 继承自 LinearLayout 因此它完全支持 LinearLayout 所支持的属性,此外,它还有其他的常用属性。

a、TableLayout 布局常用属性

属性描述
android:stretchColumns设置可被拉伸的列。如:android:stretchColumns=“0”,表示第1列可被拉伸
android:shrinkColumns设置可被收缩的列。如:android:shrinkColumns=“1,2”,表示第2,3列可收缩
android:collapseColumns设置可被隐藏的列。如:android:collapseColumns=“0”,表示第1列可被隐藏

b、TableLayout中控件常用属性

属性描述
android:layout_column设置该控件显示的位置,如android:layout_column=“1” 表示在第2个位置显示
android:layout_span设置该控件占据几行,默认为1行

在TableLayout布局中,列的宽度由该列中最宽的那个单元格(控件)决定,整个表格布局的宽度则取决与父容器的宽度。

(5)FrameLayout(帧布局)

用于在屏幕上创建一块空白区域,添加到该区域中的每个子控件占一帧,这些帧会一个一个叠加在一起,后加入的控件会叠加在上一个控件上层

默认情况下,帧布局中的所有控件会与左上角对齐。


帧布局除了通用属性外,还有两个特殊属性

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

(6)ConstraintLayout(约束布局)

ConstraintLayout(约束布局)并不太适合使用XML代码的方法编写布局,但是它非常适合使用可视化的方式编写界面布局。
相对于传统布局,ConstraintLayout(约束布局)在几个方面提供了一些新的特性

  • 相对定位

ConstraintLayout(约束布局)中的控件可以在横向纵向上以添加约束关系的方式进行相对定位,其中,横向边包括left、start、right、end,纵向边包括top、bottom、baseline(文本底部的基准线)

属性描述
layout_constraintLeft_toLeftOf控件的左边与另外一个控件的左边对齐
layout_constraintLeft_toRightOf控件的左边与另外一个控件的右边对齐
layout_constraintRight_toLeftOf控件的右边与另外一个控件的左边对齐
layout_constraintRight_toRightOf控件的右边与另外一个控件的右边对齐
layout_constraintTop_toTopOf控件的上边与另外一个控件的上边对齐
layout_constraintTop_toBottomOf控件的上边与另外一个控件的底部对齐
layout_constraintBottom_toBottomOf控件间的文本内容基准线对齐
layout_constraintStart_toEndOf控件的起始边与另外一个控件的尾部对齐
layout_constraintStart_toStartOf控件的起始边与另外一个控件的起始边对齐
layout_constraintEnd_toStartOf控件的尾部与另外一个控件的起始边对齐
layout_constraintEnd_toEndOf控件的尾部与另外一个控件的尾部对齐

  • 居中定位和倾向

相对定位不仅可以使用在两个子控件上,也可以使用在子控件和父控件中。

倾向的属性:

属性描述
layout_constraintHorizontal_bias横向的倾向
layout_constraintVertical_bias纵向的倾向
  • chain(链)

Chain(链)是一种特殊的约束,它使我们能够对一组水平或竖直方向互相关的控件进行统一管理。一组控件通过一个双向的约束关系链接起来。
Chain的头控件可以通过layout_constraintHorizontal_biaslayout_constraintVertical_bias属性设置水平链条和竖直链条的样式。其属性值为spread、spread_insidepacked。
(1)spread:设置控件在布局内平均分布。其为Chain的默认样式
(2)spread_inside:设置两端的控件与父布局无间距显示,其他的控件将在剩余的空间内采用spread样式进行布局。
(3)packed:设置Chain中的所有控件合并在一起后在布局内居中显示。

ConstraintLayout(约束布局)中,当控件宽或者高的属性设置为0dp时,Chain的3种样式可以搭配layout_constraintHorizontal_weight属性形成Weighted Chain的样式。packed可以搭配layout_constraintVertical_bias属性控制Chain与父容器的间距从而形成Packed Chain With Bias样式。

2、生命周期

提到生命周期,首先要了解一下我的的页面文件 Activity。

(1)Activity文件内容:

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
    }
}
  • 我们自己新建的页面都需要继承 AppCompatActivity 这个父类,这是谷歌官方提供的一个类,是对 Material Design 安卓开发设计规范的一种支持,并且集成了 ActionBar 应用栏;
  • onCreate 方法是安卓 Activity 的生命周期方法,当 Activity第一次创建时调用,必须使用super.onCreate(savedInstanceState) 来执行初始化父类。
  • setContentView(R.layout.activity_main) 方法的作用是设置当前Activity的可视化布局,其中 R.layout.activity_main 中的 是生成的资源类,layout 表示布局资源目录,activity_main 是具体的布局文件名。

说到生命周期,那这里我们需要了解一下安卓页面生命周期

Activity 在进栈和出栈过程中,一般有四种状态:运行、暂停、停止和销毁。

运行:页面在栈顶,即在屏幕最上方展示,当前页面处于运行状态。

暂停:当前页面被另一个页面部分遮挡时,当前页面处于暂停状态。

停止:当前页面被另一个页面完全遮挡时,当前页面处于停止状态。

销毁:当前页面由于人为或者系统原因被销毁时,处于销毁状态。

(2)Activity 的7个回调方法:

  • onCreate:当Activity页面第一次被创建时调用。
  • onStart:当用户可以看到这个Activity时调用。
  • onResume:当用户点击屏幕时调用。
  • onPause:当系统准备启动或者回复另一个活动时调用。
  • onStop:当活动完全不可见时调用。
  • onDestory:当活动被销毁时调用。
  • onRestart:当活动由停止转为运行状态时调用。

以上就是本篇的所有内容啦!内容参考了两篇文章,如有需要,可以点击链接学习。https://blog.csdn.net/weixin_44225953/article/details/114594022?fromshare=blogdetail&sharetype=blogdetail&sharerId=114594022&sharerefer=PC&sharesource=m0_74716489&sharefrom=from_linkhttps://blog.csdn.net/weixin_44225953/article/details/114594022?fromshare=blogdetail&sharetype=blogdetail&sharerId=114594022&sharerefer=PC&sharesource=m0_74716489&sharefrom=from_link

https://blog.csdn.net/ChenYiRan123456/article/details/118757279?fromshare=blogdetail&sharetype=blogdetail&sharerId=118757279&sharerefer=PC&sharesource=m0_74716489&sharefrom=from_linkhttps://blog.csdn.net/ChenYiRan123456/article/details/118757279?fromshare=blogdetail&sharetype=blogdetail&sharerId=118757279&sharerefer=PC&sharesource=m0_74716489&sharefrom=from_link

posted @ 2025-12-07 19:35  gccbuaa  阅读(2)  评论(0)    收藏  举报