Jetpack Создание текстового поля захват клавиатуры Ввод-ввод

#android #kotlin #textfield #android-jetpack-compose #android-jetpack-compose-text

Вопрос:

Из того, что я понимаю, существует API для текстового поля Jetpack Compose для захвата действий с клавиатуры, но я не знаю, что из этих API, которые могут захватывать ввод-ввод

Вариант использования этого ввода ввода для захвата состоит в том, чтобы разрешить нажать «Ввод» и попытаться перейти к следующему текстовому полю, сохраняя при этом клавиатуру открытой

 OutlinedTextField(
    value = username.value,
    onValueChange = {
        username.value = it
        },
    keyboardActions = KeyboardActions(
        onDone = {},
        onGo = {},
        onNext = {},
        onPrevious ={},
        onSearch ={},
        onSend = {}
        )
)
 

Ответ №1:

Вы можете использовать что-то вроде:

 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
    }
)

TextField(
    value = text2,
    onValueChange = {
        text2 = it
    },
    modifier = Modifier.focusRequester(focusRequester),
)
 

Комментарии:

1. спасибо за это, я попытался добавить это во 2-е текстовое 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 } поле во второе текстовое поле и использовать focusRequester.freeFocus() вместо этого, но почему-то это не убрало фокус на 2-м текстовом поле. Есть идеи по этому поводу?

2. @ArcRuler Использовать val focusManager = LocalFocusManager.current и во Modifier.onKeyEvent 2-м поле: focusManager.clearFocus()