Dělám šachy motor na plochu komponovat, jedna z věcí, které jsem se snaží realizovat je TextField
kde si můžu vložit v několika tahů, obnovit hry.
Já jsem s problémy při ukládání text, který vložím do mého TextField
composable.
Můj text composable je takto, chápu, že s mým současným provádění tiskne pokaždé, když přesunout proměnná se změní, ale jen jsem chtěl, aby se to stalo, když jsem stiskněte klávesu ZADEJTE klávesy na mé klávesnice.
Jsem pomocí print vyzkoušet nějaký kód, ale to, co chci udělat, je uložit Řetězec do seznamu nebo něco, ale že mohu realizovat v mém vlastním později.
Jen jsem se najít vysvětlení, jak to udělat s operačním systémem android a android specifické metody.
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)
To bylo poukázal na mě řešením zvládnout ZADEJTE keybind jako byly zodpovězeny zde:
Jak spustit PC Klávesnice, vstupy v Kotlin Desktop Skládat
Já jsem jen mít trochu problémy, že jsem stiskněte klávesu ENTER nelze zpracovat Řetězec, když jsem stiskněte klávesu ENTER tiskne spojitě isntead pouze jednou na základě mého výzkumu jsem se třeba zavést něco jako toto:
Box není zachytit klíčové události v Kompozici Plochy
ale nemůžu se zdají být schopen použít KeyEvent.ACTION_UP
nejsem si jistý, jestli je to specifické pro editText, pokud mi chybí nějaký dovoz, nebo jestli je jiný způsob, jak to udělat s TextField composable.
Můj kód po dané návrhy
val requester = remember { FocusRequester() }
LaunchedEffect(Unit) {
requester.requestFocus()
}
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)
.onKeyEvent {
//if(keyCode==KeyEvent.KEYCODE_ENTER&&event.action==KeyEvent.ACTION_UP){
if (it.key == Key.Enter) {
println(move.value)
true
} else {
// let other handlers receive this event
false
}
}
.focusRequester(requester)
.focusable()
)
Podařilo se tento problém vyřešit změnou, pokud stav na toto:
if (it.key == Key.Enter && move.value!="") {
println(move.value)
move.value = ""
true
}
Tak, že pokaždé, když jsem se něco napsat a stiskněte klávesu ENTER to vytiskne Řetězec a vymaže mutableState, a zatímco VSTUP je stále stisknuto nebude tisknout, protože mutableState je prázdný Řetězec. Stále hledám lepší řešení, než tohle