在 Jetpack Compose 中手动移动辅助功能焦点

Fri*_*ice 6 android-jetpack-compose

使用 Android View,我可以将焦点移动到 View,如下所示:

fun View.requestAccessibilityFocus() {
    requestFocus()
    sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_FOCUSED)
}
Run Code Online (Sandbox Code Playgroud)

如何在 Jetpack Compose 中实现这一目标?

我尝试使用 FocusRequester 但它似乎没有做任何事情:

val lifecycleOwner = LocalLifecycleOwner.current
val requester = FocusRequester()

Box {
    ...
    Image(
        ...
        contentDescription = "My heading",
        modifier = Modifier
            ...
            .focusRequester(requester)
    )
}

DisposableEffect(lifecycleOwner) {
    val observer = LifecycleEventObserver { _, event ->
         if (event == Lifecycle.Event.ON_RESUME) {
             requester.requestFocus()
         }
    }
    lifecycleOwner.lifecycle.addObserver(observer)
    onDispose { lifecycleOwner.lifecycle.removeObserver(observer) }
}
Run Code Online (Sandbox Code Playgroud)

Fri*_*ice 5

I had to add .focusable() and must do so after .focusRequester(focusRequester).

Box {
    ...
    Image(
        ...
        contentDescription = "My heading",
        modifier = Modifier
            ...
            .focusRequester(requester)
            .focusable()
    )
}
Run Code Online (Sandbox Code Playgroud)