Проблема: когда слепой пользователь перемещается с помощью TalkBack, фокус переходит непосредственно на элементы внутри сетки (например, «Квадрат, Выбрано»). Пользователь не получает никакого контекста о том, что он находится внутри пейджера, и не знает, на какой странице он находится (например, «Страница 1 из 3»).
Кроме того, простое смахивание влево/вправо позволяет перемещаться между элементами сетки, из-за чего пользователю трудно понять, что он может провести двумя пальцами для переключения страниц.
Это мой текущий код:
Код: Выделить всё
Column(modifier = modifier.fillMaxWidth(), verticalArrangement = Arrangement.spacedBy(24.dp)) {
HorizontalPager(
state = pagerState,
modifier = Modifier.fillMaxWidth(),
contentPadding = PaddingValues(horizontal = horizontalPadding),
pageSpacing = horizontalPadding * 2,
verticalAlignment = Alignment.Top
) { pageIndex ->
val pageItems = pages[pageIndex]
LazyVerticalGrid(
userScrollEnabled = false,
columns = GridCells.Fixed(maxColumns),
verticalArrangement = Arrangement.spacedBy(spacingBetweenItems),
horizontalArrangement = Arrangement.spacedBy(spacingBetweenItems),
modifier = Modifier.fillMaxWidth()
) {
items(pageItems) { item ->
Box(modifier = Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) {
Option(
isSelected = selectedItem == item,
iconRes = item.iconRes,
label = stringResource(item.labelRes),
onClick = { onItemClick(item) }
)
}
}
}
}
// Pager indicator
if (pages.size > 1) {
Row(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(
8.dp,
alignment = Alignment.CenterHorizontally
)
) {
repeat(pagerState.pageCount) {
val color = if(pagerState.currentPage == it) Color.Blue else Color.Gray
Box(
modifier = Modifier
.size(8.dp)
.clip(CircleShape)
.background(color)
)
}
}
}
}
- Невидимая семантика: я пытался добавить блок с размером 0.dp и семантикой heading() с contentDescription="Page 1 of 3". Похоже, TalkBack удаляет это из дерева доступности, потому что оно невидимо.
- Семантика контейнера: я попробовал добавить семантику {stateDescription = "Page X of Y" } к модификатору LazyVerticalGrid. Он не всегда объявляет при входе в сетку.
Подробнее здесь: https://stackoverflow.com/questions/798 ... pack-compo
Мобильная версия