Сохранение текста в виде текста, который можно компоновать при нажатии 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
        }
)
Другие вопросы по тегам