OutlinedTextField jetpack 在键盘后面撰写

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)

另外,我添加一些图片来更好地说明问题:

没有键盘的用户界面:

名称聚焦

注重金额

Age*_*ntP 0

将您的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)