kotlin 如何在Android jetpack Compose中设置默认焦点项

sqxo8psd  于 2023-03-13  发布在  Kotlin
关注(0)|答案(1)|浏览(390)

我有一个屏幕上有几个可聚焦的小部件的电视。


每次我必须点击方向键,然后Box01得到重点。
有人知道如何设置Box01默认聚焦吗?

我的代码:

@Composable
fun DefaultFocusSample(){
    Row(Modifier.padding(100.dp)) {
        FocusBox("Box01")
        Spacer(modifier = Modifier.padding(10.dp))
        FocusBox("Box02")
        Spacer(modifier = Modifier.padding(10.dp))
        FocusBox("Box03")
        Spacer(modifier = Modifier.padding(10.dp))
        FocusBox("Box04")
    }

}
@Composable
fun FocusBox(text:String){
    var color by remember { mutableStateOf(White) }
    Box(
        Modifier
            .onFocusChanged {
                color = if (it.isFocused) Green else White }
            .focusable()
            .border(2.dp,color)
    ){
        Text(text = text,
        modifier = Modifier.padding(10.dp))
    }
}
dgiusagp

dgiusagp1#

要手动将焦点设置为focusable,可以使用FocusRequester,如下所示:

@Composable
fun FocusBox(text:String, requester: FocusRequester = FocusRequester()){
    var color by remember { mutableStateOf(Color.White) }
    Box(
        Modifier
            .focusRequester(requester)
            .onFocusChanged {
                color = if (it.isFocused) Color.Green else Color.White
            }
            .focusable()
            .border(2.dp, color)
    ) {
        Text(text = text,
            modifier = Modifier.padding(10.dp))
    }
}

Row(
    Modifier
        .background(Color.Yellow)
        .padding(10.dp)
) {
    val requester = FocusRequester()
    FocusBox("Box01", requester)
    LaunchedEffect(Unit) {
        requester.requestFocus()
    }
    Spacer(modifier = Modifier.padding(10.dp))
    FocusBox("Box02")
    Spacer(modifier = Modifier.padding(10.dp))
    FocusBox("Box03")
    Spacer(modifier = Modifier.padding(10.dp))
    FocusBox("Box04")
}

LaunchedEffect是一个副作用,当可组合的出现时,它只运行一次。

相关问题