Android 撰写 - 请求焦点

Android Compose - Request Focus

无法获得对任何撰写组件的关注。它曾经在项目中工作,但经过一些 gradle 更改后,我只能在某些屏幕上请求焦点。所以我开始了一个新项目来测试干净环境中的行为。通过此设置,onFocusChange 在 requestFocus 之前获取值“inactive”(这是正确的),然后更改为“deactivated”,在 requestFocus 之后,什么也没有。这是一个几乎没有代码的新项目

@Composable
fun Greeting(name: String) {
    val focusRequester = remember { FocusRequester() }
    Button(
        onClick = {},
        modifier = Modifier
            .focusRequester(focusRequester = focusRequester)
            .onFocusChanged {
                it
            }
            .wrapContentSize()
        ,
    ) {
        Text(text = "Hello $name!")
    }
    LaunchedEffect(Unit) {
        this.coroutineContext.job.invokeOnCompletion {
            focusRequester.requestFocus()
        }
    }
}

在我的 build.gradle 中,其中 compose_version = 1.1.1

dependencies {
    implementation 'androidx.core:core-ktx:1.7.0'
    implementation "androidx.compose.ui:ui:$compose_version"
    implementation "androidx.compose.material:material:$compose_version"
    implementation "androidx.compose.ui:ui-tooling-preview:$compose_version"
    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.4.1'
    implementation 'androidx.activity:activity-compose:1.4.0'
}

您需要添加 focusable 修饰符。它应该在 onFocusChangedfocusRequestor 修饰符之后,在某些情况下也可以用 focusTarget 代替。参见 focusRequestor