Код: Выделить всё
Components.ktКод: Выделить всё
package com.example.jettipapp.components
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.*
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.sp
@Composable
fun InputField(
modifier: Modifier = Modifier,
valueState: MutableState,
labelId: String,
enabled: Boolean,
isSingleLine: Boolean,
keyboardType: KeyboardType = KeyboardType.Number,
imeAction: ImeAction = ImeAction.Next,
onAction: KeyboardActions = KeyboardActions.Default
) {
OutlinedTextField(
value = TextFieldValue(annotatedString = buildAnnotatedString { valueState.value }),
onValueChange = { currentValue: TextFieldValue -> valueState.value =
currentValue.toString()
},
modifier = modifier,
label = { Text(labelId) },
leadingIcon = { Icon(imageVector = Icons.Rounded.AttachMoney, contentDescription = "Money Icon") },
singleLine = isSingleLine,
textStyle = TextStyle(fontSize = 20.sp, color = MaterialTheme.colorScheme.onBackground),
enabled = enabled,
keyboardOptions = KeyboardOptions(keyboardType = keyboardType, imeAction = imeAction),
keyboardActions = onAction,
readOnly = false
)
}
< /code>
и вот < /p>
MainActivity.ktКод: Выделить всё
package com.example.jettipapp
import android.annotation.SuppressLint
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.*
import com.example.jettipapp.ui.theme.JetTipAppTheme
import com.example.jettipapp.components.InputField
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
App {
MainContent()
}
}
}
}
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@Composable
fun App(content: @Composable () -> Unit) {
JetTipAppTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { paddingValues ->
content()
}
}
}
@Composable
fun MainContent() {
val totalBill = remember {
mutableStateOf("")
}
val vaild = remember(totalBill.value) {
totalBill.value.trim().isNotEmpty()
}
val keyboardController = LocalSoftwareKeyboardController.current
Surface(
modifier = Modifier
.padding(2.dp)
.height(500.dp)
.fillMaxWidth(),
shape = RoundedCornerShape(10.dp),
border = BorderStroke(2.dp, Color.LightGray)
) {
Column() {
InputField(
valueState = totalBill,
labelId = "Enter Bill:",
enabled = true,
isSingleLine = true,
onAction = KeyboardActions {
if (!vaild) return@KeyboardActions
keyboardController?.hide()
}
)
}
}
}
@Preview(showBackground = true)
@Composable
fun GreetingPreview() {
App {
MainContent()
}
}
и даже когда я поднимаю его, я не могу вводить с ним. src = "https://i.sstatic.net/m6i3edspm.png"/>
Но я все еще могу скрыть клавиатуру, даже если текстовое поле появляется пустым ...
, если это необходимо, я использую API 36 с Android 16 "Baklava". И устройство - Google Pixel 9a
Подробнее здесь: https://stackoverflow.com/questions/797 ... -behaviour