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