Reputation: 1399
When I enter or tab keys still enters values into the password input field using jetpack compose.
Below is my code snippet:
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
entries from laptop keyboard via Vysor not from android keyboard.
Any suggestions are welcome here. Thanks!
Update 1:
Is there any way we can do for all the function keys like standards, with out using below code.
modifier = Modifier.onKeyEvent {
if (it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_ENTER || it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_TAB) {
focusManager.moveFocus(FocusDirection.Next)
}
false
}
Upvotes: 3
Views: 1404
Reputation: 364005
You can use a regex, something like:
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
}
)
Upvotes: 4
Reputation: 1399
val (focusRequester) = FocusRequester.createRefs()
TextField(
value = text,
onValueChange = {
if (it.isEmpty() || it.matches(pattern)) {
text = it
}
},
singleLine = true,
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(
onDone = { focusRequester.requestFocus() }
),
modifier = Modifier.onKeyEvent {
if (it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_ENTER || it.nativeKeyEvent.keyCode == KeyEvent.KEYCODE_TAB) {
focusManager.moveFocus(FocusDirection.Next)
}
false
}
)
Upvotes: 0
Reputation: 71
I think it should help you to clear focus after clicking on keyboard Done button.
val focusManager = LocalFocusManager.current
TextField(
value = text,
onValueChange = {
text = it
},
singleLine = true,
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(
onDone = { focusManager.clearFocus() }
),
)
Upvotes: 0