Android:Enter 或 Tab 键仍然使用 jetpack compose 在密码输入字段中输入值

2024-05-07

当我输入或 Tab 键时,仍然使用 jetpack compose 在密码输入字段中输入值。

下面是我的代码片段:

val (focusRequester) = FocusRequester.createRefs()

TextField(
    value = text,
    onValueChange = {
        text = it
    },
    singleLine = true,
    keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
    keyboardActions = KeyboardActions(
        onDone = { focusRequester.requestFocus() }
    ),
    modifier = Modifier.onKeyEvent {
        if (it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_ENTER){
            focusRequester.requestFocus()
            true
        }
        false
    }
)

Tab key and enter key通过 Vysor 从笔记本电脑键盘输入,而不是从 Android 键盘输入。

任何建议都欢迎在这里提出。谢谢!

更新1:

有什么方法可以让我们像标准一样处理所有功能键,而无需使用下面的代码。

modifier = Modifier.onKeyEvent {
        if (it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_ENTER || it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_TAB) {
           focusManager.moveFocus(FocusDirection.Next)
      }
        false
    }

您可以使用正则表达式,例如:

 val pattern = remember { Regex("^[^\\t\\n]*\$") }
 val focusManager = LocalFocusManager.current

 TextField(
        value = text,
        onValueChange = {
            if (it.isEmpty() || it.matches(pattern)) {
                text = it
            }
        },
        singleLine = true,
        maxLines= 1,
                    keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
        keyboardActions = KeyboardActions(
            onDone = { focusManager.moveFocus(FocusDirection.Next) }
        ),
        modifier = Modifier.onKeyEvent {
            if (it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_ENTER || it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_TAB) {
                focusManager.moveFocus(FocusDirection.Next)
            }
            false
        }
   )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:Enter 或 Tab 键仍然使用 jetpack compose 在密码输入字段中输入值 的相关文章

随机推荐