如何以编程方式设置 Compose Accessibility Talkback 的焦点

问题描述 投票:0回答:1

我想在第二个屏幕返回后按单击聚焦原始视图。例如,当我单击法律按钮时,应用程序将导航到第二主屏幕。当第二主屏幕返回时单击,它将转到主屏幕。在这里,我想重点介绍并宣布“法律”按钮。但目前,它正在从顶部(帐户详细信息)到底部读取。 有什么建议如何实现这一目标吗?

@Composable
fun Home(
    navController: NavController,
    lastFocusedItem: MutableState<String?>
) {
    val focusRequester = remember { FocusRequester() }
    LazyColumn(modifier = Modifier.fillMaxSize()) {
        itemsIndexed(
            listOf(
                "Account Details",
                "Inbox",
                "Transaction History",
                "Payment Methods",
                "Manage Wallet",
                "Merge Accounts",
                "Preferences",
                "FAQ",
                "Customer Support",
                "Legal"
            )
        ) { index, rowData ->
            TextButton(onClick = {
                navController.navigate("SecondHome")
            }, modifier = Modifier
                .focusRequester(focusRequester)
                .focusProperties { canFocus = true }
                .onGloballyPositioned {
                    if (lastFocusedItem.value == rowData) {
                        focusRequester.requestFocus()
                    }
                }
                .onFocusChanged {
                    Log.d("Testing", rowData + " " + it.hasFocus.toString())
                    if (it.isFocused) {
                        lastFocusedItem.value = rowData
                    }
                }
                .focusable()) {
                Text(text = rowData)
            }
        }
    }
}

@Composable
fun SecondHome(navController: NavController) {
    Button(onClick = { navController.popBackStack() }) {
        Text(text = "Go Back")
    }
}

@Composable
fun Navigation() {
    val lastFocusedItemId = remember { mutableStateOf<String?>(null) }
    val navController = rememberNavController()
    NavHost(navController = navController, startDestination = "Home") {
        composable("Home") {
            Home(navController = navController, lastFocusedItemId)
        }
        composable("SecondHome") {
            SecondHome(navController = navController)
        }
    }
}

想要以编程方式聚焦 Jetpack Compose Accessibility Talkback 的视图

kotlin android-jetpack-compose accessibility focus talkback
1个回答
0
投票

您可以尝试设置'isTraversalGroup = true',然后将'traversalIndex'设置为-1f

对于 LazyColumn 修饰符

Modifier.semantics { isTraversalGroup = true }

对于项目修改器

Modifier.semantics { this.traversalIndex = -1f }

官方Android文档参考这里

© www.soinside.com 2019 - 2024. All rights reserved.