Android Studio 之基础代码解析

1、 onCreate

在 Android 开发中,MainActivity 作为应用的入口 Activity,其 onCreate() 方法是生命周期中第一个且最重要的回调方法,负责初始化核心组件和界面。以下是其核心要点:

一、基本定义与作用

  1. 调用时机

    • 当 Activity 首次创建 时由系统自动调用。
    • Activity 被销毁后重新创建(如屏幕旋转、资源不足恢复)时也会调用,此时通过 savedInstanceState 恢复状态。
  2. 必须调用父类方法

    • 子类重写 onCreate()必须调用 super.onCreate(savedInstanceState),否则会抛出异常。

二、核心功能与典型操作

onCreate() 中通常完成以下初始化工作:

  1. 加载布局

    • 调用 setContentView(R.layout.activity_main) 设置 Activity 的 UI 布局。
  2. 初始化 UI 组件

    • 通过 findViewById() 获取布局中的控件(如按钮、文本框)并绑定事件。
    java 复制代码
    Button btn = findViewById(R.id.btn_action);
    btn.setOnClickListener(v -> { /* 点击逻辑 */ });
  3. 数据恢复

    • savedInstanceState 中读取之前保存的状态(如文本框内容、滚动位置)。
  4. 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

java 复制代码
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";

    @Override
    protected 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();
    }
}
相关推荐
2501_916008893 小时前
iOS应用开发工具全面解析:如何选择与优化开发效率
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
执明wa7 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio
404_coder7 小时前
源码视角下的 Android 开机流程:从 Zygote、SystemServer 到 Launcher
android
二流小码农8 小时前
鸿蒙开发:以登录案例了解代码架构MVVM
android·ios·harmonyos
用户69371750013848 小时前
从代码生产者到 AI 协作者:软件工程师的角色重构
android·前端·后端
GitLqr9 小时前
别在 Flutter 的 main() 里乱锁屏幕方向,小心 iPad 分屏功能被你搞没了
android·flutter·ios
sg_knight9 小时前
MySQL 存储过程详解:从入门到实战
android·数据库·mysql·database·dba·关系型数据库·db
爱笑鱼9 小时前
Binder(四):ioctl(BINDER_WRITE_READ) 之后,事务怎样到达目标进程?
android
AFinalStone9 小时前
Android 7系统休眠唤醒(二)开机全链路—BootROM到Launcher
android·电源管理·休眠唤醒