详细介绍: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"
;
@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(
)
;
}
}
posted @ 2025-07-21 10:00  yjbjingcha  阅读(17)  评论(0)    收藏  举报