2025年2月27日 星期四

Android app 程式設計-畫面底部 有三個按鈕 -1

 

 目標

  • 畫面底部 有三個按鈕 (Option1, Option2, Option3)
  • 點擊按鈕時,顯示 Toast 訊息
  • 使用 Jetpack Compose 來設計 UI
MainActivity.kt(完整程式碼 + 註解)

package com.example.myapplication  // 定義這個 Kotlin 檔案的 package 名稱

import android.os.Bundle
import android.widget.Toast
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp

// `MainActivity` 繼承 `ComponentActivity`,是應用的主要活動 (Activity)
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) { // `onCreate` 是 Activity 的進入點
        super.onCreate(savedInstanceState)
        setContent { // 使用 Jetpack Compose 來設定 UI
            MyApp() // 呼叫 `MyApp()` 來顯示畫面
        }
    }
}

// `MyApp` 是 Compose 函式 (Composable),用來定義畫面內容
@Composable
fun MyApp() {
    val context = LocalContext.current // 取得當前的 Context (用來顯示 Toast)

    // `Box` 是一個容器,它會填滿整個畫面,並讓內容對齊底部
    Box(
        modifier = Modifier.fillMaxSize(), // `fillMaxSize()` 讓 Box 佔滿整個螢幕
        contentAlignment = Alignment.BottomCenter // 讓內容對齊到畫面底部
    ) {
        // `Row` 用來水平排列三個按鈕
        Row(
            modifier = Modifier
                .fillMaxWidth() // 讓 Row 佔滿整個寬度
                .padding(16.dp), // 設定四周的間距
            horizontalArrangement = Arrangement.SpaceEvenly // 讓按鈕均分寬度
        ) {
            // 第一個按鈕:Option 1
            Button(onClick = {
                Toast.makeText(context, "Option 1 Clicked!", Toast.LENGTH_SHORT).show()
            }) {
                Text("Option 1") // 按鈕內的文字
            }

            // 第二個按鈕:Option 2
            Button(onClick = {
                Toast.makeText(context, "Option 2 Clicked!", Toast.LENGTH_SHORT).show()
            }) {
                Text("Option 2")
            }

            // 第三個按鈕:Option 3
            Button(onClick = {
                Toast.makeText(context, "Option 3 Clicked!", Toast.LENGTH_SHORT).show()
            }) {
                Text("Option 3")
            }
        }
    }
}

// `PreviewMyApp()` 用來預覽 `MyApp()` 的畫面 (在 Android Studio 預覽模式中可見)
@Preview(showBackground = true)
@Composable
fun PreviewMyApp() {
    MyApp()
}




📌 程式碼解析

1️⃣ setContent { MyApp() }

  • 這是 Jetpack Compose 的進入點,取代了傳統 setContentView(R.layout.activity_main)
  • MyApp() 是一個 @Composable 函式,負責畫面設計。

2️⃣ 使用 BoxRow 來排列 UI

  • Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.BottomCenter)
    • 所有內容填滿整個畫面,並對齊到底部。
  • Row(modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly)
    • 讓三個按鈕水平排列,並且 平均分配寬度

3️⃣ 使用 Button(onClick = { ... }) 來建立按鈕

  • 當使用者點擊按鈕時,會顯示 Toast 訊息,例如:
    kotlin
    Toast.makeText(context, "Option 1 Clicked!", Toast.LENGTH_SHORT).show()
  • 這樣當按鈕被點擊時,就會在螢幕下方彈出「Option 1 Clicked!」的提示。

4️⃣ @Preview 提供畫面預覽

  • @Preview 讓你可以在 Android Studio 預覽 UI,不需要每次都執行 App。