Jetpack Compose 教學上課講義【從零開始學 Jetpack Compose 程式設計】文字輸入框元件

 

【從零開始學 Jetpack Compose 程式設計】

線上教學課程目錄: https://bit.ly/3JF4SFA
Youtube 課程播放清單:https://bit.ly/3tFjRbx
Udemy 線上課程:https://bit.ly/3MbVnhO


輸入文字,即時顯示在文字標籤上

Column{
    var textVal by remember { mutableStateOf("") }

    TextField(
        value = textVal,
        onValueChange = { textVal = it}
    )

    Text(textVal)
}

鍵盤種類

var textVal by remember { mutableStateOf("") }

TextField(
    value = textVal,
    onValueChange = { textVal = it },
    keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number)
)

密碼密文顯示

var textVal by remember { mutableStateOf("") }

TextField(
    value = textVal,
    onValueChange = { textVal = it },
    visualTransformation = PasswordVisualTransformation()
)

按鈕按下獲得文字

Column {
    var textVal by remember { mutableStateOf("") }
    var inputData by remember { mutableStateOf("") }

    TextField(
        value = textVal,
        onValueChange = { textVal = it }
    )

    Button(onClick = {
        inputData = textVal
    }) {
        Text(text = "獲取文字框文字")
    }

    Text(inputData)
}

其他種樣式

https://developer.android.com/reference/kotlin/androidx/compose/material/package-summary#overview

TextField
BasicTextField
OutlinedTextField

BMI計算機

@Composable
fun Demo() {
    var heightVal by rememberSaveable { mutableStateOf("") }
    var weightVal by rememberSaveable { mutableStateOf("") }
    var resultVal by rememberSaveable { mutableStateOf("") }


    ConstraintLayout(
        modifier = Modifier
            .fillMaxHeight()
            .fillMaxWidth()
    ) {

        val (textTitle,
            inputHeight,
            inputWeight,
            textResult,
            btnCalc,
            btnClean) = createRefs()

        val topGuideline = createGuidelineFromTop(0.1f)

        Text("BMI計算機",
            fontSize = 50.sp,
            modifier = Modifier.constrainAs(textTitle) {
                top.linkTo(topGuideline)
                start.linkTo(parent.start)
                end.linkTo(parent.end)
            })

        TextField(
            value = heightVal,
            onValueChange = { heightVal = it },
            label = { Text("身高(cm)") },
            singleLine = true,
            modifier = Modifier
                .constrainAs(inputHeight) {
                    top.linkTo(textTitle.bottom, 20.dp)
                    start.linkTo(parent.start)
                    end.linkTo(parent.end)
                }
        )

        TextField(
            value = weightVal,
            onValueChange = { weightVal = it },
            label = { Text("體重(kg)") },
            singleLine = true,
            modifier = Modifier.constrainAs(inputWeight) {
                top.linkTo(inputHeight.bottom, 20.dp)
                start.linkTo(parent.start)
                end.linkTo(parent.end)
            }
        )

        if (resultVal.isNotBlank()) {
            Text(resultVal,
                fontSize = 20.sp,
                modifier = Modifier.constrainAs(textResult) {
                    top.linkTo(inputWeight.bottom, 20.dp)
                    start.linkTo(parent.start)
                    end.linkTo(parent.end)
                })
        }

        Button(onClick = {
            resultVal = calcBMI(height = heightVal, weight = weightVal)
        },
            modifier = Modifier
                .constrainAs(btnCalc) {
                    bottom.linkTo(parent.bottom, 10.dp)
                    start.linkTo(parent.start)
                    end.linkTo(btnClean.start)
                }) {
            Text("計算", fontSize = 50.sp)
        }

        Button(onClick = {
            heightVal = ""
            weightVal = ""
            resultVal = ""
        },
            modifier = Modifier
                .constrainAs(btnClean) {
                    bottom.linkTo(parent.bottom, 10.dp)
                    start.linkTo(btnCalc.end)
                    end.linkTo(parent.end)
                }) {
            Text("清除", fontSize = 50.sp)
        }
    }
}


fun calcBMI(height: String, weight: String): String {

    val bmi = weight.toDouble() / (height.toDouble() / 100).pow(2.0)
    val bmiData = String.format("%.1f", bmi)

    var result = ""
    if (bmi < 18.5) {
        result = "太瘦了~"
    } else if (bmi > 18.5 && bmi < 24.9) {
        result = "標準,很棒喔~"
    } else if (bmi > 24.9 && bmi < 30) {
        result = "過胖!!!"
    } else {
        result = "肥胖!"
    }
    return "你的 BMI 為: $bmiData \n $result";
}

這個網誌中的熱門文章

2023 最新入門零基礎 Kotlin教學【從零開始學 Kotlin 程式設計】Kotlin 教學課程目錄 (Android Kotlin, IntelliJ IDEA, Android Studio, Android APP 開發教學)

nano 文字編輯器

2022 最新入門零基礎 Flutter教學 【Flutter 程式設計入門實戰 30 天】Flutter 教學課程目錄 (IntelliJ IDEA 開發教學)

16天記下7000單字

最新入門零基礎 Java 教學【從零開始學 Java 程式設計】Java教學課程目錄 (IntelliJ IDEA 開發教學)