Accessibility — основе, VoiceOver и TalkBack за слепе кориснике

Аутор: IT Sectr Објављено: 2026-02-26 Време читања: 9 мин

Accessibility (a11y) — обезбеђивање приступачности мобилне апликације за особе са инвалидитетом. Укључује подршку екранских читача (VoiceOver на iOS, TalkBack на Android), скалирање текста (Dynamic Type), довољан контраст боја (WCAG 2.1 ниво AA), навигацију без вида и алтернативе гестовима. Према подацима СЗО (2023), преко 1,3 милијарде људи (16% становништва) живи са неким обликом инвалидитета — accessibility није опција, већ неопходност. Детаљније — у званичној документацији компаније Apple о accessibility.

Главно

  • Accessibility — приступачност апликације за особе са инвалидитетом (вид, слух, моторика)
  • VoiceOver — екрански читач компаније Apple, који чита наглас елементе интерфејса на iOS и macOS
  • TalkBack — екрански читач компаније Google за Android са гестовном контролом без вида
  • WCAG 2.1 — међународни стандард приступачности: контраст 4.5:1, величина додирних области 44×44pt
  • contentDescription — атрибут Android за описивање елемената које чита TalkBack

Шта је Accessibility (a11y) у мобилним апликацијама?

Accessibility (скраћено a11y — 11 слова између «a» и «y») — пракса развоја апликација доступних особама са оштећењима вида, слуха, моторике и когнитивним карактеристикама. У мобилном развоју, accessibility обухвата четири главна сценарија: слепи корисници (екрански читачи), слабовиди (скалирање, контраст), глуви и наглуви (титлови, визуелне алтернативе звуку), корисници са ограниченом моториком (гласовна контрола, Switch Control, велика област додира).

Правни захтеви — у многим земљама accessibility је обавезна по закону. САД: Section 508 и ADA. ЕУ: European Accessibility Act (2025). Велика Британија: Equality Act 2010. Без подршке accessibility, апликација може постати предмет судског спора — у САД је 2023. године поднето преко 4000 тужби због недоступности дигиталних производа. Apple и Google проверавају accessibility приликом модерисања апликација: App Store Review Guidelines (4.2) и Google Play Store захтевају минималну подршку приступачности.

Пословни аргумент — приступачност повећава публику. Према Return on Disability (2021), особе са инвалидитетом контролишу 13 билиона долара расположивог прихода годишње. Доступне апликације такође боље рангирају у претрази (семантички HTML, алт-текстови), имају вишу корисничку оцену и мање рецензија о проблемима са UX. У IT Sectr-у укључујемо accessibility у definition of done свих пројеката — то је стандард квалитета, а не опционо побољшање.

Accessibility у iOS: VoiceOver и UIAccessibility

VoiceOver — екрански читач компаније Apple, уграђен у iOS, iPadOS и macOS. Корисник превлачи прстом по екрану, VoiceOver чита назив елемента под прстом. Двоструки додир — активација елемента. VoiceOver подржава преко 40 гестова: три прста превлачење (листање), два прста двоструки додир (заустављање), Z-гест (повратак). Програмер контролише шта и како VoiceOver чита кроз протокол UIAccessibility и својства accessibilityLabel, accessibilityTraits, accessibilityHint.

swift
class CustomButton: UIButton {

    override var isAccessibilityElement: Bool {
        get { return true }
        set {}
    }

    // override accessibilityLabel
    override var accessibilityLabel: String? {
        get { return "Дугме за слање обрасца" }
        set {}
    }

    // override accessibilityHint
    override var accessibilityHint: String? {
        get { return "Двапут додирните да пошаљете податке" }
        set {}
    }

    // override accessibilityTraits
    override var accessibilityTraits: UIAccessibilityTraits {
        get { return .button }
        set {}
    }
}

// Dynamic Type — скалирање текста
titleLabel.font = UIFontMetrics.default.scaledFont(
    for: UIFont.systemFont(ofSize: 16)
)
titleLabel.adjustsFontForContentSizeCategory = true

Динамичка типографија — Dynamic Type у iOS омогућава кориснику да изабере величину текста (од XS до XXXL). Програмер користи UIFontMetrics.scaledFont за аутоматско скалирање. Текст мора бити исправно приказан у свим величинама: редови не смеју бити одсечени, дугмад морају расти пропорционално тексту. UITableView аутоматски ажурира висину ћелија при промени величине текста. Игнорисање Dynamic Type-а значи учинити апликацију недоступном за слабовиде кориснике.

Accessibility у SwiftUI

SwiftUI пружа модификаторе за accessibility: .accessibilityLabel(), .accessibilityHint(), .accessibilityAddTraits(), .accessibilitySortPriority(). Подразумевано, сви стандардни SwiftUI елементи (Text, Button, Image) су већ accessibility елементи са аутоматским ознакама. За прилагођене View-ове користите .accessibilityElement(children: .combine) за спајање подређених елемената у један. SwiftUI аутоматски подржава Dynamic Type и VoiceOver.

swift
VStack {
    Image(systemName: "trash")
        .accessibilityLabel(Text("Уклони елемент"))
    Text("Корпа")
        .font(.body)
}
.accessibilityElement(children: .combine)
.accessibilityAddTraits(.isButton)
.accessibilityHint(Text("Брише изабрани елемент без могућности опоравка"))

Accessibility у Android: TalkBack и contentDescription

TalkBack — екрански читач компаније Google, предвиђен на већини Android уређаја (доступан у Google Play-у за све верзије Android 5+). TalkBack користи исте гестове као VoiceOver: превлачење за навигацију, двоструки додир за активацију. Програмер поставља опис елемената кроз атрибут android:contentDescription у XML-у или кроз setContentDescription() у коду. За ImageView, contentDescription је обавезан — без њега TalkBack пријављује «није означено» или чита име датотеке.

kotlin
// XML: contentDescription за ImageView
<ImageView
    android:id="@+id/iconDelete"
    android:src="@drawable/ic_delete"
    android:contentDescription="@string/delete_button_desc"
    android:focusable="true"
    android:clickable="true" />

// Kotlin: програмско постављање
iconDelete.contentDescription = getString(R.string.delete_button_desc)

// Accessibility Delegate (прилагођени)
iconDelete.accessibilityDelegate = object : View.AccessibilityDelegate() {
    override fun onInitializeAccessibilityNodeInfo(
        host: View, info: AccessibilityNodeInfo
    ) {
        super.onInitializeAccessibilityNodeInfo(host, info)
        info.text = "Дугме за брисање"
        info.contentDescription = "Уклони изабрани елемент"
        info.className = Button::class.java.name
    }
}

// Live Regions за динамичка ажурирања
textView.accessibilityLiveRegion = View.ACCESSIBILITY_LIVE_REGION_POLITE

Live Regions — механизам Android-а за обавештавање TalkBack-а о промени садржаја без фокуса. Атрибут android:accessibilityLiveRegion узима три вредности: none (нема обавештења), polite (објавити након тренутног), assertive (објавити одмах). Користите polite за ажурирање статуса учитавања, assertive — за критичне грешке. Злоупотреба assertive-а доводи до хаоса за корисника — TalkBack ће стално прекидати тренутну радњу.

Accessibility Scanner

Accessibility Scanner — бесплатна апликација компаније Google за тестирање приступачности Android апликација без приступа изворном коду. Скенер проверава: контраст текста, величину додирних области (минимум 48×48dp према Android Accessibility Guidelines), постојање contentDescription за ImageView, исправност хијерархије елемената. За аутоматске тестове користите AccessibilityChecks из Espresso-а — они се интегришу у CI/CD и проверавају accessibility при сваком билду.

WCAG 2.1: контраст, величина и додирне области

WCAG 2.1 (Web Content Accessibility Guidelines) — међународни стандард приступачности који је развио W3C. Верзија 2.1 (2018) укључује 13 додатних критеријума за мобилне апликације. Нивои усаглашености: A (минимални), AA (обавезан за већину организација), AAA (максимални). Apple и Google препоручују ниво AA као минимални за објављивање апликација. WCAG 2.2 је објављен 2023. године са прецизирањима за фокус и унос.

Кључни критеријуми за мобилни развој: контраст текста најмање 4.5:1 (AA) или 7:1 (AAA), величина додирних области минимум 44×44pt (iOS) или 48×48dp (Android), подршка за пејзажну и портретну оријентацију без губитка функционалности, могућност искључивања анимације (prefers-reduced-motion), постојање титлова за мултимедију, компатибилност са гласовном контролом (Voice Control на iOS, Voice Access на Android).

Критеријум WCAG 2.1НивоЗахтев за iOSЗахтев за Android
1.4.3 Контраст (текст)AA4.5:1 за обичан, 3:1 за велики4.5:1 за обичан, 3:1 за велики
1.4.11 Контраст (не-текст)AA3:1 за иконе, границе3:1 за иконе, границе
2.5.5 Величина циљаAAA44×44pt48×48dp
2.3.3 АнимацијаAAAprefers-reduced-motionandroid:animateLayoutChanges
4.1.2 Име, улога, вредностAaccessibilityLabel, traitscontentDescription, role

Алати за проверу контраста — Colour Contrast Analyser (TPGI), WebAIM Contrast Checker, Stark (Figma), Accessibility Inspector (Xcode). У IT Sectr-у проверавамо контраст у фази дизајна (Figma + Stark) и поново у фази развоја (Accessibility Inspector / Accessibility Scanner). Минимални захтев — 4.5:1 за сав текст мањи од 18pt (14pt bold). За логотипе и декоративне елементе контраст није потребан.

Тестирање приступачности: алати и контролна листа

iOS тестирање — Accessibility Inspector у Xcode-у (Xcode → Open Developer Tool → Accessibility Inspector) проверава label, traits, hint за сваки елемент. VoiceOver се може укључити у подешавањима или кроз Accessibility Shortcut (троструки притисак дугмета). За аутоматске тестове користите XCUITest са XCTAssertTrue(app.staticTexts["label"].isAccessibilityElement). Apple препоручује тестирање свих екрана апликације са укљученим VoiceOver-ом.

Android тестирање — Accessibility Scanner (Play Store) проверава контраст, величину додирних области, contentDescription. За аутоматизацију: Espresso AccessibilityChecks (import: androidTestImplementation 'androidx.test.espresso:espresso-accessibility:3.5.1'). Google препоручује контролну листу: сваки ImageView има contentDescription, додирне области нису мање од 48×48dp, текст се скалира до 200% без одсецања, сви елементи су доступни превлачењем TalkBack-а.

IT Sectr контролна листа — пре издавања проверавамо: (1) VoiceOver/TalkBack исправно чита све елементе, (2) текст се скалира до максималне величине без губитка функционалности, (3) сви ImageView имају contentDescription, (4) контраст текста ≥4.5:1 у свим темама, (5) додирне области ≥44pt/48dp, (6) нема контекстуалног менија доступног само дугим притиском, (7) подршка за Reduce Motion / Remove Animations у системским подешавањима. Ова контролна листа је део definition of done сваког спринта.

Често постављана питања

По чему се VoiceOver разликује од TalkBack-а?

VoiceOver — екрански читач компаније Apple за iOS, iPadOS, macOS. Користи гестове једним и више прстију (превлачење, двоструки додир). TalkBack — пандан компаније Google за Android са сличним гестовима. VoiceOver чита accessibilityLabel, TalkBack — contentDescription. Оба подржавају Брајеве дисплеје и гласовну контролу. Суштинских разлика у функционалности нема.

Шта је contentDescription у Android-у?

contentDescription — атрибут View-а у Android-у који поставља текстуални опис за TalkBack. Без њега TalkBack пријављује «није означено» или чита име класе (ImageView, Button). Додаје се кроз android:contentDescription="@string/desc" у XML-у или view.contentDescription = "текст" у коду. За декоративне слике користите contentDescription=@null.

Који је минимални контраст за accessibility?

Према WCAG 2.1 ниво AA: 4.5:1 за обичан текст и 3:1 за велики (од 18pt или 14pt bold). Ниво AAA: 7:1 за обичан и 4.5:1 за велики. Проверавајте контраст у две теме (светлој/тамној). Кршење контраста је најчешћи проблем приступачности у мобилним апликацијама према подацима Google-а.

Да ли треба подржати Dynamic Type у iOS-у?

Да, Apple препоручује Dynamic Type за све апликације. Корисник подешава величину текста у Подешавањима. Програмер користи UIFontMetrics.scaledFont — фонт се аутоматски скалира. Без Dynamic Type-а корисници са слабим видом неће моћи да читају текст. iOS аутоматски проверава Dynamic Type приликом модерисања у App Store-у.

Шта је WCAG?

WCAG (Web Content Accessibility Guidelines) — међународни стандард приступачности садржаја од W3C. Верзија 2.1 (2018) укључује критеријуме за мобилне апликације: контраст, величину додирних области (44×44pt), подршку за екранске читаче, алтернативе гестовима, титлове. Ниво AA — минимални стандард за објављивање у App Store-у и Google Play-у.

Резиме

  • Accessibility — приступачност апликација за 1,3 милијарде људи са инвалидитетом (СЗО, 2023)
  • VoiceOver (iOS) и TalkBack (Android) — екрански читачи за слепе кориснике
  • UIAccessibility — iOS протокол за постављање label, hint, traits accessibility елемената
  • contentDescription — атрибут Android за описивање елемената за TalkBack
  • WCAG 2.1 — контраст 4.5:1, додирне области 44×44pt, подршка Dynamic Type
  • Dynamic Type — скалирање текста у iOS-у путем UIFontMetrics.scaledFont
  • Тестирање — Accessibility Inspector (iOS), Accessibility Scanner (Android), Espresso Checks

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође