Укладка клавиатуры в очереди имеет странное поведениеAndroid

Форум для тех, кто программирует под Android
Anonymous
Укладка клавиатуры в очереди имеет странное поведение

Сообщение Anonymous »

Вот мой код: < /p>

Код: Выделить всё

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/xdjc9aiim.png"/>
и даже когда я поднимаю его, я не могу вводить с ним. src = "https://i.sstatic.net/m6i3edspm.png"/>
Но я все еще могу скрыть клавиатуру, даже если текстовое поле появляется пустым ...
, если это необходимо, я использую API 36 с Android 16 "Baklava". И устройство - Google Pixel 9a

Подробнее здесь: https://stackoverflow.com/questions/797 ... -behaviour

Вернуться в «Android»