2025年2月20日 星期四

Hello Android! 進階版-1

實現按一個按鈕才顯示 "Hello Android!" 的功能

以使用 Jetpack Compose 的狀態管理來控制文本的顯示與隱藏。以下是改寫後的程式碼:


  1. 首先,你需要在 Greeting 函數中加入一個按鈕,並使用 MutableState 來控制文本的顯示與隱藏。

  2. 當按鈕被點擊時,切換狀態以顯示或隱藏文本。



package com.example.myapplication

import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment // 導入 Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import com.example.myapplication.ui.theme.MyApplicationTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContent {
            MyApplicationTheme {
                Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
                    Greeting(
                        modifier = Modifier.padding(innerPadding)
                    )
                }
            }
        }
    }
}

@Composable
fun Greeting(modifier: Modifier = Modifier) {
    // 使用 remember 來保存狀態
    var showText by remember { mutableStateOf(false) }

    Column(
        modifier = modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally // 使用 Alignment
    ) {
        // 當 showText 為 true 時顯示文本
        if (showText) {
            Text(
                text = "Hello Android!",
                modifier = Modifier.padding(bottom = 16.dp)
            )
        }

        // 按鈕,點擊時切換 showText 的值
        Button(onClick = { showText = !showText }) {
            Text(text = if (showText) "Hide Text" else "Show Text")
        }
    }
}

@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
    MyApplicationTheme {
        Greeting()
    }
}


程式碼說明:

1 導入 Alignment:

在檔案頂部加入 import androidx.compose.ui.Alignment。

Alignment 是 Compose UI 中用於對齊的類別,例如 Alignment.CenterHorizontally 用於水平居中對齊。

2 showText 狀態:使用 remember { mutableStateOf(false) } 來創建一個可觀察的狀態 showText,初始值為 false,表示文本一開始是隱藏的。

3 條件渲染:在 Column 中,使用 if (showText) 來判斷是否顯示 "Hello Android!" 文本。

4 按鈕點擊事件:按鈕的 onClick 事件會切換 showText 的值,從而控制文本的顯示與隱藏。按鈕的文本也會根據 showText 的值動態變化。

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 Column(
        modifier = modifier
            .fillMaxSize()
            .padding(16.dp),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally // 使用 Alignment
    ) 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


這段程式碼的效果是:

  • Column 會佔滿父容器的全部空間,並設置 16 dp 的內邊距。

  • Column 中的所有子元素會在垂直方向上居中排列。

  • 每個子元素會在水平方向上居中對齊。



運行效果:

  • 1 當你運行這個應用程式時,一開始只會看到一個按鈕,點擊按鈕後會顯示 "Hello Android!" 文本。

  • 2 再次點擊按鈕,文本會隱藏。