我希望能够在文本对象上设置可访问性焦点,但仅当它变得可见时(通过记住的可变状态布尔值).这意味着屏幕需要完成重新组合,然后我们才能对其进行任何其他操作.

我已将我的代码设置如下:

    var isVisible by remember { mutableStateOf(false) }
    var focusRequester = remember { FocusRequester() }
    if (isVisible) {
        Text(text = "Text", modifier = Modifier
            .focusRequester(focusRequester)
            .focusable())
        focusRequester.requestFocus()
    }
    
    Button(onClick = { isVisible = true  }) {
        Text(text = "Make text appear and focused")
    }

当我们达到focusRequester.requestFocus()时,这会失败,因为文本对象还没有出现在屏幕上.

有没有办法判断屏幕是否重新组合了?这样我就可以做这样的事情:

    if (isVisible) {
        Text(text = "Text", modifier = Modifier
            .focusRequester(focusRequester)
            .focusable())
        if (isRecomposed) {
             focusRequester.requestFocus()
        }
    }

推荐答案

你可以使用LaunchedEffect,它在你的Compoable进入合成时触发它的块.

@Preview
@Composable
private fun RecompositionSample() {

    var isVisible by remember { mutableStateOf(false) }
    val focusRequester = remember { FocusRequester() }

    Column {
        if (isVisible) {
            Text(
                text = "Text",
                modifier = Modifier
                    .focusRequester(focusRequester)
                    .focusable(true)
            )

            LaunchedEffect(Unit) {
                awaitFrame()
                focusRequester.requestFocus()
            }
        }

        Button(onClick = { isVisible = true }) {
            Text(text = "Make text appear and focused")
        }
    }
}

Android相关问答推荐

Android 14无法删除已配置的文件

为什么Kotlin允许将非空值类型化为可空类型,但又将其视为非空值?

如何在Jetpack Compose中将对象的移动从一个路径平滑地切换到另一个路径?

页面更改时不显示 cogo toast 消息

如何在卡片视图右侧添加箭头

在java android studio项目上安装mapbox

Gradle在我的Android Compose项目中继续推广依赖版本

减少Compose中可滚动选项卡之间的间距

Android Jetpack Compose 电视焦点恢复

为一组闪烁的可组合项制作动画,控制同步/定时

[Android][Room] 将密封类存储到 Room 数据库中

如何知道我的应用程序的新版本是否显示广告?

从 Jetpack Compose 中的 IconButton 中删除黑色色调

Jetpack Compose 部分或开放侧边框

如何解决 compose 中material 图标的由于接收器类型不匹配,以下候选者都不适用

Compose Accompaniist Pager 中的 TabRow/Tab 重组问题

我的观点在jetpack compose中相互重叠

Android Studio xml 预览问题无法初始化编辑器

如何更改工具栏主页图标 colored颜色

在 Android 中比较日期的最佳方法