Staraj się, aby Twoja aplikacja na Androida była użyteczna dla wszystkich, w tym dla osób z potrzebami w zakresie ułatwień dostępu.
Osoby z wadami wzroku, daltonizmem, wadami słuchu, zaburzeniami sprawności, niepełnosprawnościami poznawczymi i wieloma innymi niepełnosprawnościami korzystają z urządzeń z Androidem. Gdy tworzysz aplikacje z myślą o ułatwieniach dostępu, poprawiasz komfort użytkowania dla osób z potrzebami w zakresie ułatwień dostępu.
Na tej stronie znajdziesz wytyczne dotyczące implementowania kluczowych elementów ułatwień dostępu, aby każdy mógł łatwiej korzystać z Twojej aplikacji. Więcej szczegółowych wskazówek dotyczących zwiększania dostępności aplikacji znajdziesz w artykule Zasady zwiększania dostępności aplikacji.
Zwiększanie widoczności tekstu
W przypadku każdego zestawu tekstu w aplikacji zalecamy, aby kontrast kolorów—czyli różnica w postrzeganej jasności między kolorem tekstu a kolorem tła – był powyżej określonego progu. Dokładny próg zależy od rozmiaru czcionki tekstu i tego, czy tekst jest pogrubiony:
- Jeśli tekst jest mniejszy niż 18sp lub jeśli jest pogrubiony i mniejszy niż 14sp, użyj kolorów pierwszego planu i tła, które zapewniają współczynnik kontrastu kolorów wynoszący co najmniej 4,5:1.
- W przypadku pozostałego tekstu ustaw współczynnik kontrastu kolorów na co najmniej 3:1.
Na ilustracji poniżej przedstawiono 2 przykłady kontrastu kolorów tekstu i tła:
Aby sprawdzić kontrast kolorów tekstu i tła w aplikacji, użyj internetowego narzędzia do sprawdzania kontrastu kolorów lub aplikacji Accessibility Scanner.
Używanie dużych, prostych elementów sterujących
Interfejs aplikacji jest łatwiejszy w użyciu, jeśli elementy sterujące są łatwiejsze do zobaczenia i dotknięcia. W przypadku interfejsów dotykowych zalecamy, aby każdy interaktywny element interfejsu miał obszar, na którym można się skupić , czyli rozmiar docelowego elementu dotykowego, wynoszący co najmniej 48 dp x 48 dp. Im większy, tym lepiej.
W Jetpack Compose wiele wbudowanych komponentów materiałowych, takich jak Button,
IconButton, i ListItem wymusza już ten minimalny rozmiar. Podczas tworzenia niestandardowych elementów interaktywnych musisz jednak samodzielnie ustawić rozmiar.
W tym fragmencie mały element interfejsu jest dostępny dzięki zwiększeniu jego docelowego elementu dotykowego:
@Composable private fun LargeBox() { var clicked by remember { mutableStateOf(false) } Box( Modifier .size(100.dp) .background(if (clicked) Color.DarkGray else Color.LightGray) ) { Box( Modifier .align(Alignment.Center) .clickable { clicked = !clicked } .background(Color.Black) .sizeIn(minWidth = 48.dp, minHeight = 48.dp) ) } }
Więcej informacji o rozmiarach docelowych elementów dotykowych znajdziesz w artykule Minimalne rozmiary docelowych elementów dotykowych.
Opisywanie każdego elementu interfejsu
W przypadku każdego elementu interfejsu w aplikacji dodaj opis, który wyjaśnia jego przeznaczenie. W większości przypadków ten opis dodajesz w atrybucie contentDescription elementu, jak pokazano w tym fragmencie kodu:
@Composable private fun ShareButton(onClick: () -> Unit) { IconButton(onClick = onClick) { Icon( imageVector = Icons.Filled.Share, contentDescription = stringResource(R.string.label_share) ) } }
Pamiętaj, że nie musisz podawać parametru contentDescription w przypadku elementów kompozycyjnych Text. Usługi ułatwień dostępu na Androidzie (np. TalkBack) automatycznie odczytują sam tekst.
Podczas dodawania opisów do elementów interfejsu aplikacji pamiętaj o tych sprawdzonych metodach:
Używaj opisów, aby przekazywać cel i wynik interakcji, a nie szczegóły wizualne. Użyj semantycznej właściwości
Role(np.Role.ButtonlubRole.Switch), aby ujawnić typ elementu interfejsu. Dzięki temu czytniki ekranu mogą prawidłowo odczytywać element.Unikaj powtórzeń w opisach. Jeśli na przykład wybranie przycisku powoduje wykonanie w aplikacji działania „prześlij”, opis przycisku powinien brzmieć
"Submit", a nie"Submit button".Każdy opis powinien być unikalny. Dzięki temu, gdy użytkownicy czytnika ekranu napotkają powtarzający się opis elementu, prawidłowo rozpoznają, że fokus jest na elemencie, który był już wcześniej zaznaczony. W szczególności każdy element na liście, np.
LazyColumn, powinien mieć inny opis, który odzwierciedla treść unikalną dla danego elementu, np. nazwę miasta na liście lokalizacji.Użyj interfejsu API
hideFromAccessibility, aby oznaczyć elementy czysto dekoracyjne, tak aby usługi ułatwień dostępu mogły je ignorować. Jeśli element interfejsu ma parametrcontentDescription, ale jest czysto dekoracyjny (np.Icon, który jest częścią innego elementu interfejsu), przekaż wartośćnull, aby uniknąć zbędnego etykietowania. Więcej złożonych przypadków użycia znajdziesz w artykule Scalanie i czyszczenie.Przetestuj kod, aby upewnić się, że opis treści jest dostarczany zgodnie z oczekiwaniami. Android Lint, testowanie Compose oraz ręczne i automatyczne narzędzia do testowania mogą oznaczać typowe problemy i ujawniać problemy w implementacji.
Dodatkowe materiały
Więcej informacji o zwiększaniu dostępności aplikacji znajdziesz w tych dodatkowych materiałach: