I cannot figure out how to set the initial focus for Talkback for Compose elements… I am able to do it for keyboard focus just fine…
Here is an example where you click on the first thing with a keyboard and the second thing takes focus. This works:
@Composable
fun TestAutoFocus() {
val requester = remember { FocusRequester() }
Column {
Text("First",
modifier = Modifier
.clickable {
requester.requestFocus()
})
Text(
"Second",
modifier = Modifier
.focusRequester(requester)
.clickable { }
)
}
}
Similarly, if you add LaunchedEffect
to request focus initially, this also works for keyboard focus:
@Composable
fun TestAutoFocus() {
val requester = remember { FocusRequester() }
Column {
Text("First",
modifier = Modifier
.clickable {
requester.requestFocus()
})
Text(
"Second",
modifier = Modifier
.focusRequester(requester)
.clickable { }
)
}
LaunchedEffect(Unit) {
requester.requestFocus()
}
}
Switching to Talkback, I can hook up the first thing so when you click on it with Talkback, a11y-focus is put onto the second thing:
@Composable
fun TestAutoFocus() {
val requester = remember { FocusRequester() }
Column {
Text("First",
modifier = Modifier
.clickable {
requester.requestFocus()
})
Text(
"Second",
modifier = Modifier
.focusRequester(requester)
.focusable()
)
}
}
However, I cannot figure out how to make the second thing focused by Talkback “on load”… Trying LaunchedEffect
doesn’t work:
@Composable
fun TestAutoFocus() {
val requester = remember { FocusRequester() }
Column {
Text("First",
modifier = Modifier
.clickable {
requester.requestFocus()
})
Text(
"Second",
modifier = Modifier
.focusRequester(requester)
.focusable()
)
}
LaunchedEffect(Unit) {
requester.requestFocus()
}
}
What am I missing here? Please help…