Сохранение текста в виде текста, который можно компоновать при нажатии ENTER
Я делаю шахматный движок на настольном компьютере, одна из вещей, которые я пытаюсь реализовать, - это текстовое поле, в которое я могу вставить несколько ходов, чтобы воссоздать игры.
У меня проблемы с сохранением текста, который я ввожу в свой составной текст.
Мой составной текст выглядит следующим образом: я понимаю, что с моей текущей реализацией он печатается каждый раз, когда изменяется переменная перемещения, но я просто хотел, чтобы это происходило, когда я нажимаю ENTERклавишу на клавиатуре.
Я использую печать, чтобы попробовать какой-то код, но я хочу сохранить String в список или что-то в этом роде, но позже я могу реализовать это самостоятельно.
Я нахожу только объяснения того, как это сделать с помощью специальных методов для Android и Android.
Text(" Play", textAlign = TextAlign.Center, fontSize = 30.sp)
val move = remember { mutableStateOf("Play") }
TextField(
value = move.value,
onValueChange = { move.value = it },
label = { Text("Move") },
maxLines = 1,
textStyle = TextStyle(color = Color.Black, fontWeight = FontWeight.Bold),
modifier = Modifier.padding(20.dp)
)
println(move.value)
Мне было указано на решение для обработки ENTERпривязки клавиш, как было сказано здесь: ввод Как запускатьс клавиатуры ПК в Kotlin Desktop Compose, но я все еще не могу обрабатывать String, когда я нажимаюENTER
Я подумал о том, чтобы объявить его как глобальную переменную и создать метод в A Thread, чтобы продолжать проверять, был ли нажат ENTER, но этот тип переменной является частью составного объекта и не может быть объявлен вне составного объекта, насколько мне известно я не могу объявить это глобально.
1 ответ
Вы можете фиксировать ключевые события с помощью
Modifier.onKeyEvent
. С текстовым полем вам не нужен захват фокуса, потому что он уже есть. Если вам нужно сделать то же самое для пользовательского представления, ознакомьтесь с этим ответом .
Чтобы проверить, какая кнопка была нажата, вы можете использовать
key
, а чтобы проверить, где он был выпущен, вы можете проверить
type
:
TextField(
value = text,
onValueChange = { text = it },
modifier = Modifier
.onKeyEvent { keyEvent ->
if (keyEvent.key != Key.Enter) return@onKeyEvent false
if (keyEvent.type == KeyEventType.KeyUp) {
println("Enter released")
}
true
}
)