Fab*_*sas 5 android textfield android-softkeyboard android-jetpack-compose
我使用 Jetpack Compose 来制作应用程序 UI,但它有一些问题:当单击键盘上的下一个按钮时,它将焦点移动到下一个TextField(数量),这很好,但问题是TextField键盘后面的保留,这意味着屏幕动画没有触发:
如何将屏幕移动到新的下一个输入?
@Composable
fun KeyboardSample() {
Scaffold(
modifier = Modifier
.fillMaxSize()
.padding(start = 16.dp, end = 16.dp),
) {
val name = rememberSaveable { mutableStateOf("") }
val updateName = { _name: String ->
name.value = _name
}
val amount = rememberSaveable { mutableStateOf("") }
val updateAmount = { _amount: String ->
amount.value = _amount
}
TextFieldsToExperiment(
name = name.value,
updateName = updateName,
amount = amount.value,
updateAmount = updateAmount
)
}
}
@Composable
fun TextFieldsToExperiment(
name: String,
updateName: (String) -> Unit,
amount: String,
updateAmount: (String) -> Unit
) {
val focusManager = LocalFocusManager.current
val focusRequester = FocusRequester()
Column(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Spacer(modifier = Modifier.height(390.dp))
OutlinedTextField(
value = name,
onValueChange = updateName,
label = { Text("Name") },
placeholder = { Text(text = "Name") },
singleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.Sentences,
autoCorrect = true,
keyboardType = KeyboardType.Text,
imeAction = ImeAction.Next
),
keyboardActions = KeyboardActions(onNext = {
focusManager.moveFocus(FocusDirection.Down)
}),
modifier = Modifier
.fillMaxWidth()
.padding(top = 6.dp, start = 0.dp, end = 0.dp, bottom = 6.dp),
)
Text(text = "Hello")
Spacer(Modifier.height(8.dp))
OutlinedTextField(
value = amount,
onValueChange = updateAmount,
label = { Text("Amount") },
placeholder = { Text(text = "Amount") },
singleLine = true,
keyboardOptions = KeyboardOptions.Default.copy(
capitalization = KeyboardCapitalization.Sentences,
autoCorrect = true,
keyboardType = KeyboardType.Text,
imeAction = ImeAction.Done
),
keyboardActions = KeyboardActions(onDone = {
focusManager.clearFocus()
}),
modifier = Modifier
.fillMaxWidth()
.focusRequester(focusRequester)
.padding(top = 6.dp, start = 0.dp, end = 0.dp, bottom = 6.dp),
)
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我添加一些图片来更好地说明问题:
没有键盘的用户界面:

名称聚焦

注重金额

将您的KeyboardSample()内容放入LazyColumn中,如下所示
@Composable
fun KeyboardSample() {
Scaffold(
modifier = Modifier
.fillMaxSize()
.padding(
start = 16.dp,
end = 16.dp
),
) {
val name = rememberSaveable { mutableStateOf("") }
val updateName = { _name: String ->
name.value = _name
}
val amount = rememberSaveable { mutableStateOf("") }
val updateAmount = { _amount: String ->
amount.value = _amount
}
LazyColumn{
item {
TextFieldsToExperiment(
name = name.value,
updateName = updateName,
amount = amount.value,
updateAmount = updateAmount
)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
最重要的是,将其添加到清单中的活动中
android:windowSoftInputMode="adjustResize"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2765 次 |
| 最近记录: |