我想在第二个屏幕返回后按单击聚焦原始视图。例如,当我单击法律按钮时,应用程序将导航到第二主屏幕。当第二主屏幕返回时单击,它将转到主屏幕。在这里,我想重点介绍并宣布“法律”按钮。但目前,它正在从顶部(帐户详细信息)到底部读取。 有什么建议如何实现这一目标吗?
@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 的视图
您可以尝试设置'isTraversalGroup = true',然后将'traversalIndex'设置为-1f
对于 LazyColumn 修饰符
Modifier.semantics { isTraversalGroup = true }
对于项目修改器
Modifier.semantics { this.traversalIndex = -1f }
官方Android文档参考这里