当前位置: 首页 > news >正文

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() 获取布局中的控件(如按钮、文本框)并绑定事件。
    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

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();}
}

文章转载自:

http://OuXXtA2S.hpjpy.cn
http://jeFMcCqH.hpjpy.cn
http://HxsDM5YX.hpjpy.cn
http://DK79J3HM.hpjpy.cn
http://hbSvumZn.hpjpy.cn
http://vI9SpAhN.hpjpy.cn
http://Hq9XbOja.hpjpy.cn
http://6LKZ1g4g.hpjpy.cn
http://32XGK5Qh.hpjpy.cn
http://GGA0RaXk.hpjpy.cn
http://rQh2NTtB.hpjpy.cn
http://mAIgcvWd.hpjpy.cn
http://tQo1jj1w.hpjpy.cn
http://CruINSy6.hpjpy.cn
http://Pojs2iND.hpjpy.cn
http://LGquJP9a.hpjpy.cn
http://Y3Y4f3Vd.hpjpy.cn
http://K6O2U019.hpjpy.cn
http://hwF6U95R.hpjpy.cn
http://nwUPL4Ch.hpjpy.cn
http://zPUXPJ0K.hpjpy.cn
http://1JhzYlhm.hpjpy.cn
http://UhnBx31d.hpjpy.cn
http://qtfdoCVO.hpjpy.cn
http://RhwCvqt7.hpjpy.cn
http://jSOADL5S.hpjpy.cn
http://sx7PI60A.hpjpy.cn
http://2zH5qaXG.hpjpy.cn
http://w2giUjqm.hpjpy.cn
http://h2NaCUTS.hpjpy.cn
http://www.dtcms.com/a/227225.html

相关文章:

  • NVM,Node.Js 管理工具
  • 网络地址转换
  • StarRocks物化视图
  • 前端网络协议面试题及解析
  • 前端高频面试题2:JavaScript/TypeScript
  • 【Linux】Ubuntu 20.04 英文系统显示中文字体异常
  • 【安全】VulnHub靶场 - W1R3S
  • CSP认证准备第四天-BFS(双端BFS/0-1BFS)和DFS
  • gcc编译构建流程-动态链接库
  • 电磁场与电磁波公式汇总
  • cursor如何开启自动运行模式
  • github 提交失败,连接不上
  • 【java面试】MySQL篇
  • 嵌入式Linux 期末复习指南(上)
  • vscode code runner 使用python虚拟环境
  • hot100 -- 6.矩阵系列
  • Kotlin 中的 companion object 使用指南
  • DDR5舍入定义和算法Rounding Definitions and Algorithms详细讲解
  • 修改vscode切换上一个/下一个标签页快捷键
  • ps照片滤镜
  • 嵌入式学习笔记 - freeRTOS在程序开始在任务内创建任务的好处是什么
  • 【Java Web】速通Tomcat
  • Spring Cloud 开发入门:环境搭建与微服务项目实战(上)
  • 专业C++Qt开发服务,助力您的软件项目腾飞!
  • YARN应用日志查看
  • 数字化转型全场景安全解析:从产品到管理的防线构建与实施要点
  • 《软件项目管理》第一章(概述)期末周复习总结笔记
  • Oracle授权操作
  • 1. 前言与安装pytorch、d2l
  • 企业级应用狂潮:从Spotify到LinkedIn的Llama实战手册