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://www.pswp.cn/web/82632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC图像去噪:核心原理、算法实现与深度学习模型详解

1. 背景概述 1.1 目标与范畴 在AIGC(人工智能生成内容) 的技术生态系统中,图像生成模型(如生成对抗网络GAN、扩散模型Diffusion Model)所产出的视觉内容,其质量常因训练数据中的固有瑕疵、生成过程中的随机扰动或数据传输期间的信号衰减而呈现出不同程度的退化。因此,…

电路图识图基础知识-自耦变压器降压启动电动机控制电路(十六)

自耦变压器降压启动电动机控制电路 自耦变压器降压启动电动机控制电路是将自耦变压器的原边绕组接于电源侧,副边绕组接 于电机侧。电动机定子绕组启动时的电压为自耦变压器降压后得到的电压,这样可以减少电动 机的启动电流和启动力矩,当电动…

Life:Internship finding

1. 前言 fishwheel writes this Blog to 记录自分自身在研二下找实习的经历。When 写这篇 Blog 的时候我的最后一搏也挂掉了,只能启用保底方案了。When I 打开我的邮箱时,发现里面有 nearly 100 多封与之相关的邮件,顿时感到有些心凉&#x…

Redis 常用数据类型和命令使用

目录 1 string 2 hash 3 list 4 set集合 5 zset有序集合 1 string 值可以是字符串、数字和二进制的value&#xff0c;值最大不能超过512MB 应用场景&#xff1a; 应用程序缓存 计数器 web共享session 限速 1.1 设置单个键值 set <key> value [EX seconds|PX…

Spring Boot缓存组件Ehcache、Caffeine、Redis、Hazelcast

一、Spring Boot缓存架构核心 Spring Boot通过spring-boot-starter-cache提供统一的缓存抽象层&#xff1a; #mermaid-svg-PW9nciqD2RyVrZcZ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-PW9nciqD2RyVrZcZ .erro…

【photoshop】专色浓度和专色密度

1.1 专色浓度 是图层填充到专色前&#xff0c;设置的前景色CMYK的K值。填充到专色后&#xff0c;可以查看到专色中图层的k值。 ps前景色填充快捷键 1.Windows 系统&#xff1a;Alt Delete&#xff1b;2.Mac 系统&#xff1a;Option Delete。 1.2专色密度 专色的属性&…

用电脑控制keysight示波器

KEYSIGHT示波器HD304MSO性能 亮点&#xff1a; 体验 200 MHz 至 1 GHz 的带宽和 4 个模拟通道。与 12 位 ADC 相比&#xff0c;使用 14 位模数转换器 &#xff08;ADC&#xff09; 将垂直分辨率提高四倍。使用 10.1 英寸电容式触摸屏轻松查看和分析您的信号。捕获 50 μVRMS …

leetcode hot100刷题日记——33.二叉树的层序遍历

解题总结二维vector的初始化方法 题目描述情况1&#xff1a;不确定行数和列数情况2&#xff1a;已知行数和列数情况3&#xff1a;已知行数但不知道列数情况4&#xff1a;已知列数但不知道行数 题目描述 解答&#xff1a;用队列 思路都差不多&#xff0c;我觉得对于我自己来说&a…

微服务面试资料1

在当今快速发展的技术领域&#xff0c;微服务架构已经成为构建复杂系统的重要方式之一。本文将围绕微服务的核心概念、技术栈、分布式事务处理、微服务拆分与设计&#xff0c;以及敏捷开发实践等关键问题展开深入探讨&#xff0c;旨在为准备面试的 Java 开发者提供一份全面的复…

【设计模式-4.8】行为型——中介者模式

说明&#xff1a;本文介绍行为型设计模式之一的中介者模式 定义 中介者模式&#xff08;Mediator Pattern&#xff09;又叫作调节者模式或调停者模式。用一个中介对象封装一系列对象交互&#xff0c;中介者使各对象不需要显式地互相作用&#xff0c;从而使其耦合松散&#xf…

Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数

Oracle 的SEC_CASE_SENSITIVE_LOGON 参数 关键版本信息 SEC_CASE_SENSITIVE_LOGON 参数在以下版本中被弃用&#xff1a; Oracle 12c Release 1 (12.1)&#xff1a; 该参数首次被标记为"过时"(obsolete)但依然保持功能有效 Oracle 18c/19c 及更高版本&#xff1a; …

《图解技术体系》How Redis Architecture Evolves?

Redis架构的演进经历了多个关键阶段&#xff0c;从最初的内存数据库发展为支持分布式、多模型和持久化的高性能系统。以下为具体演进路径&#xff1a; 单线程模型与基础数据结构 Redis最初采用单线程架构&#xff0c;利用高效的I/O多路复用&#xff08;如epoll&#xff09;处…

【电赛培训课】测量与信号类赛题分析

一、赛题基本情况及硬件电路准备 &#xff08;一&#xff09;赛题基本情况 1.测量与信号类赛题统计 2.测量与信号类赛题特点 &#xff08;二&#xff09;硬件电路准备 综测环节不允许带入电脑和手机&#xff0c;需要自己根据题目要求和芯片参数指标进行设计和计算&#xff0c…

移动AI神器GPT Mobile:多模型自由切换

GPT Mobile是什么 GPT Mobile是一款开源的本地移动部署AI工具,主要用于安卓设备。以下是其相关介绍: 功能特点 多模型交互:支持与多个大型语言模型(LLM)同时进行对话,用户导入相应的API密钥,就可连接OpenAI、Anthropic、Google、Ollama等平台,还能根据需求自由切换不同…

AirSim/Cosys-AirSim 游戏开发(二)使用自定义场景

在实际的开发过程中很少会只用 AirSim 自带的 Blocks 场景&#xff0c;通常需要用到自定义的一些环境和模型&#xff0c;依托于强大的 UE 引擎可以较为逼真地完成场景渲染。这篇博客记录了如何从头开始导入一个自定义场景并加载 AirSim 插件。 【Note】&#xff1a;由于 UE Ed…

GPU 图形计算综述 (三):可编程管线 (Programmable Pipeline)

2000年左右&#xff0c;微软在DirectX 8.0中首次提出了Shader Model 1.0和顶点着色器&#xff08;Vertex Shader&#xff09;的概念&#xff0c;标志着可编程管线时代的来临。随后&#xff0c;在DirectX 9.0中推出了Shader Model 2.0和像素着色器&#xff08;Pixel Shader&…

【Go语言基础【3】】变量、常量、值类型与引用类型

文章目录 一、值&#xff08;Value&#xff09;与字面量&#xff08;Literal&#xff09;1. 值2. 字面量 二、变量&#xff08;Variable&#xff09;1. 声明方式2. 赋值方式3. 变量默认值4. 类型与值的匹配 三、常量&#xff08;Constant&#xff09;1. 声明方式2. 常量的特性3…

AWS 亚马逊 S3存储桶直传 前端demo 复制即可使用

自己踩过坑不想别人也踩坑了 亚马逊S3存储桶直传前端demo复制即可使用 <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0…

Python数据可视化科技图表绘制系列教程(四)

目录 带基线的棒棒糖图1 带基线的棒棒糖图2 带标记的棒棒糖图 哑铃图1 哑铃图2 包点图1 包点图2 雷达图1 雷达图2 交互式雷达图 【声明】&#xff1a;未经版权人书面许可&#xff0c;任何单位或个人不得以任何形式复制、发行、出租、改编、汇编、传播、展示或利用本博…

如何有效删除 iPhone 上的所有内容?

“在出售我的 iPhone 之前&#xff0c;我该如何清除它&#xff1f;我担心如果我卖掉它&#xff0c;有人可能会从我的 iPhone 中恢复我的信息。” 升级到新 iPhone 后&#xff0c;你如何处理旧 iPhone&#xff1f;你打算出售、以旧换新还是捐赠&#xff1f;无论你选择哪一款&am…