Android Studio 之基础代码解析
1、 onCreate
在 Android 开发中,MainActivity
作为应用的入口 Activity,其 onCreate()
方法是生命周期中第一个且最重要的回调方法,负责初始化核心组件和界面。以下是其核心要点:
一、基本定义与作用
-
调用时机
- 当 Activity 首次创建 时由系统自动调用。
- Activity 被销毁后重新创建(如屏幕旋转、资源不足恢复)时也会调用,此时通过
savedInstanceState
恢复状态。
-
必须调用父类方法
- 子类重写
onCreate()
时必须调用super.onCreate(savedInstanceState)
,否则会抛出异常。
- 子类重写
二、核心功能与典型操作
在 onCreate()
中通常完成以下初始化工作:
-
加载布局
- 调用
setContentView(R.layout.activity_main)
设置 Activity 的 UI 布局。
- 调用
-
初始化 UI 组件
- 通过
findViewById()
获取布局中的控件(如按钮、文本框)并绑定事件。
Button btn = findViewById(R.id.btn_action); btn.setOnClickListener(v -> { /* 点击逻辑 */ });
- 通过
-
数据恢复
- 从
savedInstanceState
中读取之前保存的状态(如文本框内容、滚动位置)。
- 从
-
ViewCompat.setOnApplyWindowInsetsListener
4.1. 作用原理
-
监听系统栏(状态栏、导航栏)的尺寸变化,实时调整视图内边距(Padding)。
-
通过
insets.getInsets(WindowInsetsCompat.Type.systemBars())
获取系统栏的精确尺寸(如状态栏高度、导航栏高度)。 -
调用
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
将内容区域避开系统栏显示区域。4.2. 解决什么问题
-
避免内容被状态栏或导航栏遮挡(如图片重叠、按钮点击失效)。
-
适配刘海屏、折叠屏等异形屏设备。
三、参数 savedInstanceState
详解
- 作用:存储 Activity 上次被销毁前的状态(通过
onSaveInstanceState()
保存)。 - 值为
null
的场景:- Activity 首次创建 时。
- 被系统彻底销毁(非配置变更导致)后重建。
2.代码
在自动生成的代码里面 + Button
package com.example.myapplication;import android.os.Bundle;
import android.util.Log;
import android.widget.Button;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_main);// 添加个人按钮Button actionButton = findViewById(R.id.btn_action);// 添加个人按钮 actionButton.setOnClickListener(v -> {performCustomAction();Log.d(TAG, "按钮点击事件已触发");});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;});}// 添加个人按钮private void performCustomAction() {Toast.makeText(this, "回调函数执行成功喽!", Toast.LENGTH_SHORT).show();}
}