Проблема, с которой я столкнулся, заключается в том, что когда я перемещаюсь с экрана на экран с помощью Jetpack Compose, цель Talkback не перемещается в верхнюю часть нового экрана, как должна, вместо этого она находит ближайшую цель к области экран, как он был включен ранее. То есть, если я нажимаю кнопку для навигации по центру экрана, при загрузке нового экрана он фокусируется на центре экрана, а не наверху. Я пробовал очистить фокус и запросить фокус, но безуспешно.
Вот некорректный экран
@Composable
private fun IncidentScreen(
viewState: IncidentViewModel.ViewState,
onBackClicked: () -> Unit,
onMoreInfoClicked: () -> Unit,
onWebViewDismissed: () -> Unit,
) {
val focusManager = LocalFocusManager.current
val focusRequester = remember { FocusRequester() }
LaunchedEffect(Unit) {
focusManager.clearFocus(true)
focusRequester.freeFocus()
focusRequester.requestFocus()
}
BaseScreen(
title = viewState.incidentType,
navigationIcon = {
NavigationBackButton(onClick = onBackClicked, modifier = Modifier.focusTarget().focusRequester(focusRequester).focusable())
}
) { paddingValues ->
LazyColumn(Modifier.fillMaxWidth()) {
item {
MapPreview(
locationOnMap = viewState.locationOnMap,
severity = viewState.severity,
category = viewState.category
)
}
item {
IncidentHeroBar(
incidentType = viewState.incidentType,
incidentName = viewState.incidentName,
incidentDistance = viewState.distanceUser,
incidentDistanceFromWatchZone = viewState.distanceFromClosestWatchZone,
severity = viewState.severity,
category = viewState.category
)
}
items(viewState.incidentInfoItems) {
Box(
Modifier
.fillMaxWidth()
.padding(horizontal = 16.dp)
) {
Column {
Spacer(modifier = Modifier.height(16.dp))
IncidentListItem(title = stringResource(id = it.title.title_res), body = it.body)
Spacer(modifier = Modifier.height(8.dp))
HorizontalDivider()
}
}
}
item {
SecondaryButton(
modifier = Modifier
.fillMaxWidth()
.padding(20.dp),
text = stringResource(id = R.string.btn_incident_more_info),
onClick = { onMoreInfoClicked.invoke() }
)
}
}
FadedVisibility(
visible = viewState.isLoading
) {
Box(
contentAlignment = Alignment.Center,
modifier = Modifier
.background(MaterialTheme.colorScheme.scrim.copy(alpha = 0.32f))
.padding(paddingValues)
.fillMaxSize()
) {
CircularProgressIndicator()
}
}
}
}```
I've already tried to use focus manager and focus requester with no luck
`
LaunchedEffect(Unit) {
focusManager.clearFocus(true)
focusRequester.freeFocus()
focusRequester.requestFocus()
}
`
Подробнее здесь: https://stackoverflow.com/questions/787 ... n-navigate