2025年2月21日 星期五

Hello Android! 進階版 -2

再加第二個按扭,按一下就顯示“Hello world !”


package com.example.myapplication


import android.os.Bundle

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.unit.dp

import com.example.myapplication.ui.theme.MyApplicationTheme


// 將 enum class 移到 @Composable 函數外部

enum class DisplayText { NONE, ANDROID, WORLD }


class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)

        setContent {

            MyApplicationTheme {

                Greeting()

            }

        }

    }

}


@Composable

fun Greeting(modifier: Modifier = Modifier) {

    // 使用 enum 狀態

    var displayedText by remember { mutableStateOf(DisplayText.NONE) }


    Column(

        modifier = modifier.fillMaxSize().padding(16.dp),

        verticalArrangement = Arrangement.Center,

        horizontalAlignment = Alignment.CenterHorizontally

    ) {

        Button(

            onClick = {

                displayedText = if (displayedText == DisplayText.ANDROID) DisplayText.NONE 

                               else DisplayText.ANDROID

            },

            modifier = Modifier.padding(bottom = 8.dp)

        ) {

            Text(text = if (displayedText == DisplayText.ANDROID) "Hide Android" 

                       else "Show Android")

        }


        Button(

            onClick = {

                displayedText = if (displayedText == DisplayText.WORLD) DisplayText.NONE 

                               else DisplayText.WORLD

            },

            modifier = Modifier.padding(bottom = 8.dp)

        ) {

            Text(text = if (displayedText == DisplayText.WORLD) "Hide World" 

                       else "Show World")

        }


        when (displayedText) {

            DisplayText.ANDROID -> Text("Hello Android!", Modifier.padding(top = 16.dp))

            DisplayText.WORLD -> Text("Hello World!", Modifier.padding(top = 16.dp))

            DisplayText.NONE -> {} // 不顯示任何文本

        }

    }

}






運行效果:

  1. 初始畫面有兩個按鈕:

    • "Show Android" 和 "Show World"。

  2. 點擊按鈕後:

    • 點擊 "Show Android" → 顯示 "Hello Android!",按鈕文字變為 "Hide Android"。

    • 點擊 "Show World" → 顯示 "Hello World!",按鈕文字變為 "Hide World"。

  3. 再次點擊按鈕 → 隱藏對應的文本。


////////////// 程式說明 ////////////////////




總結:

1 fun Greeting(modifier: Modifier = Modifier) 是一個可組合函數,用於定義一個 UI 元件。

2 modifier 參數允許外部呼叫者靈活調整 UI 的外觀。

3 內部使用 Column 佈局來排列按鈕和文本。

4 使用 remember 和 mutableStateOf 來管理狀態,實現動態 UI 更新。