TalkBack — چیست، حرکات کنترلی و تنظیم در Android

نویسنده: IT Sectr منتشر شده: 2026-05-15 زمان مطالعه: 8 دقیقه

TalkBack — صفحه‌خوان داخلی (screen reader) ساخته Google برای Android است که بخشی از بسته Android Accessibility Suite می‌باشد. این ابزار عناصر رابط کاربری را صداگذاری می‌کند و امکان کنترل دستگاه با استفاده از حرکات را فراهم می‌آورد و به کاربران نابینا و کم‌بینا دسترسی کامل به عملکردهای گوشی هوشمند می‌دهد. بر اساس Google Accessibility Help (2025)، TalkBack روی اکثر دستگاه‌های Android از پیش نصب شده است و بیش از ۳۰ زبان را با موتورهای مختلف صوتی پشتیبانی می‌کند.

نکات اصلی

  • TalkBack — صفحه‌خوان داخلی Google برای Android با کنترل حرکتی و بازخورد صوتی
  • فوکوس دسترسی عنصری را که TalkBack در حال حاضر صداگذاری می‌کند با یک قاب زرد مشخص می‌کند
  • حرکات شامل لمس (صداگذاری)، لمس دوبل (فعال‌سازی) و کشیدن با سه انگشت است
  • توسعه‌دهندگان دسترسی را از طریق contentDescription و AccessibilityNodeInfo تنظیم می‌کنند
  • TalkBack با Google Assistant و نمایشگرهای بریل یکپارچه می‌شود

TalkBack چیست؟

TalkBack — یک صفحه‌خوان (screen reader) برای Android است که توسط Google توسعه یافته و بخشی از Android Accessibility Suite می‌باشد. این ابزار برای کاربران دارای مشکلات بینایی، بازخورد صوتی و کنترل حرکتی فراهم می‌کند. TalkBack می‌تواند هم روی گوشی‌های هوشمند و هم روی تبلت‌ها، تلویزیون‌های هوشمند و دستگاه‌های پوشیدنی با Wear OS کار کند.

TalkBack اولین بار در Android 1.6 (Donut) در سال ۲۰۰۹ ظاهر شد. در ابتدا یک پروژه مجزا بود، اما با انتشار Android 4.0 (Ice Cream Sandwich) به بخشی از Android Accessibility Suite — مجموعه سرویس‌هایی که شامل Switch Access و Select to Speak نیز می‌شود — تبدیل شد. از Android 10 به بعد، TalkBack روی همه دستگاه‌های دارای سرویس‌های Google Play از جمله دستگاه‌های شرکا — Samsung، Xiaomi، Oppo و دیگران — از پیش نصب شده است.

TalkBack بیش از ۳۰ زبان را با موتورهای مختلف صوتی پشتیبانی می‌کند: Google Text-to-Speech، Samsung TTS و موتورهای شخص ثالث. برای زبان فارسی از موتور صوتی Google TTS استفاده می‌شود که تلفظ طبیعی و آهنگ درست را فراهم می‌کند. کاربر می‌تواند سرعت گفتار، زیروبمی صدا را تنظیم کرده و جنسیت صدا را در تنظیمات TalkBack انتخاب کند.

TalkBack چگونه کار می‌کند؟

TalkBack بر اساس سرویس دسترسی (AccessibilityService) کار می‌کند — مکانیزم سیستمی Android که به برنامه‌ها اجازه می‌دهد اطلاعاتی درباره وضعیت رابط کاربری دریافت کرده و به صورت برنامه‌نویسی با آن تعامل داشته باشند. وقتی TalkBack فعال است، تمام رویدادهای لمسی را رهگیری کرده و آنها را به حرکات خاص صفحه‌خوان تبدیل می‌کند.

فوکوس دسترسی

عنصر کلیدی کار TalkBack — فوکوس دسترسی (accessibility focus) است. برخلاف فوکوس ورودی استاندارد که به صورت برجسته‌سازی فیلد متنی دیده می‌شود، فوکوس دسترسی با یک قاب زرد دور عنصر نمایش داده می‌شود و برای کاربر بدون TalkBack نامرئی است. وقتی فوکوس دسترسی به عنصری می‌رسد، TalkBack محتوا، نوع و وضعیت آن را صداگذاری می‌کند.

کاربر فوکوس دسترسی را با حرکات جابجا می‌کند: کشیدن به راست — عنصر بعدی، کشیدن به چپ — عنصر قبلی. عناصر به ترتیب تعیین‌شده توسط AccessibilityNodeInfo — درخت دسترسی که Android برای هر صفحه می‌سازد — پیمایش می‌شوند. توسعه‌دهنده می‌تواند از طریق ویژگی‌های accessibilityTraversalBefore و accessibilityTraversalAfter بر ترتیب تأثیر بگذارد که برای صفحات پیچیده با چیدمان سفارشی بسیار مهم است.

AccessibilityNodeInfo و درخت دسترسی

هر View روی صفحه با یک گره در درخت دسترسی — یک شیء AccessibilityNodeInfo — نمایش داده می‌شود. این شیء شامل: متن عنصر (contentDescription یا متن View)، نوع عنصر (دکمه، چک‌باکس، فیلد ورودی)، وضعیت (فعال/غیرفعال/انتخاب‌شده)، موقعیت روی صفحه و فهرست اقدامات موجود است. TalkBack این درخت را پیمایش کرده و هر گره را به ترتیب پیمایش صداگذاری می‌کند.

اگر View محتوای متنی نداشته باشد (مثلاً ImageView بدون توضیح)، برای TalkBack نامرئی می‌شود — کاربر از وجود آن مطلع نخواهد شد. برای حل این مشکل، توسعه‌دهنده contentDescription — توضیح متنی که TalkBack به جای سکوت می‌گوید — را تنظیم می‌کند. Android همچنین stateDescription را برای عناصر با وضعیت قابل تغییر (انتخاب‌شده/انتخاب‌نشده) و hintText را برای فیلدهای ورودی با راهنما پشتیبانی می‌کند.

حرکات کنترلی TalkBack

TalkBack حرکات استاندارد Android را به حرکات خاص صفحه‌خوان تبدیل می‌کند. بیشتر عملیات با یک یا دو انگشت انجام می‌شود و حرکات سه انگشتی برای اقدامات جهانی رزرو شده‌اند.

عملحرکتنتیجه
صداگذاری عنصرلمس با ۱ انگشتنام و نوع عنصر را می‌گوید
فعال‌سازیلمس دوبلفشار دکمه یا انتقال
بعدیکشیدن به راستعنصر بعدی
قبلیکشیدن به چپعنصر قبلی
پیمایش۲ انگشت کشیدنپیمایش لیست
منوی TalkBackکشیدن بالا-چپمنوی سراسری تنظیمات

حرکت «کشیدن بالا-چپ» (کشیدن L-shaped) منوی سراسری TalkBack را باز می‌کند، جایی که کاربر می‌تواند سرعت گفتار را تغییر دهد، پرده صفحه را فعال کند، آموزش را راه‌اندازی کرده یا تنظیمات را باز کند. TalkBack همچنین منوی زمینه‌ای برای عناصر پشتیبانی می‌کند: کشیدن بالا-راست فهرست اقدامات موجود برای عنصر جاری را باز می‌کند (مثلاً «کپی»، «چسباندن» برای فیلد متنی یا «حذف» برای پیام چت).

TalkBack در توسعه موبایل

Android API غنی برای تنظیم دسترسی فراهم می‌کند. سطح پایه contentDescription است، اما برای پشتیبانی باکیفیت از TalkBack کار با AccessibilityNodeInfo، AccessibilityDelegate و LiveRegion لازم است.

ContentDescription و ویژگی‌های مهم

ویژگی android:contentDescription توضیح متنی عنصر را برای TalkBack تعیین می‌کند. این ویژگی برای ImageView، ImageButton، FloatingActionButton و هر View سفارشی بدون محتوای متنی الزامی است. برای عناصر استاندارد (TextView، Button) contentDescription اختیاری است — TalkBack متن را به صورت خودکار می‌خواند.

kotlin
val avatarView = ImageView(this)
avatarView.contentDescription = "آواتار کاربر"
avatarView.importantForAccessibility =
    IMPORTANT_FOR_ACCESSIBILITY_YES

val playButton = ImageButton(this)
playButton.contentDescription = "پخش ویدیو"

val progressBar = ProgressBar(this)
progressBar.importantForAccessibility =
    IMPORTANT_FOR_ACCESSIBILITY_NO

پرچم importantForAccessibility دید عنصر را برای TalkBack کنترل می‌کند. مقدار NO عنصر را از درخت دسترسی پنهان می‌کند — برای تصاویر تزئینی، نشانگرها و پس‌زمینه‌های سفارشی مفید است. مقدار YES عنصر را حتی بدون متن به اجبار در پیمایش قرار می‌دهد. مهم است که از NO سوءاستفاده نشود: پنهان کردن عناصر معنایی مهم، برنامه را برای کاربران TalkBack غیرقابل دسترس می‌کند.

AccessibilityDelegate و اقدامات سفارشی

برای Viewهای سفارشی که از کنترل‌کننده‌های کلیک استاندارد استفاده نمی‌کنند، باید AccessibilityDelegate — کلاسی که رویدادهای دسترسی را پردازش می‌کند — بازنویسی شود. دلیگیت امکان تنظیم توضیح سفارشی، نوع عنصر و فهرست اقدامات موجود را فراهم می‌کند که TalkBack از طریق منوی زمینه‌ای به کاربر ارائه می‌دهد.

kotlin
class CustomButtonDelegate : View.AccessibilityDelegate() {
    override fun onInitializeAccessibilityNodeInfo(
        host: View, info: AccessibilityNodeInfoCompat
    ) {
        super.onInitializeAccessibilityNodeInfo(host, info)
        info.text = "دکمه سفارشی"
        info.className = Button::class.java.name
        info.addAction(
            AccessibilityNodeInfoCompat.AccessibilityActionCompat(
                R.id.custom_action, "اشتراک‌گذاری"
            )
        )
    }

    override fun performAccessibilityAction(
        host: View, action: Int, args: Bundle?
    ): Boolean {
        if (action == R.id.custom_action) {
            shareContent()
            return true
        }
        return super.performAccessibilityAction(host, action, args)
    }
}

در مثال، دلیگیت به TalkBack اطلاع می‌دهد که عنصر یک دکمه است (className = Button) و اقدام سفارشی «اشتراک‌گذاری» را ارائه می‌دهد که در منوی زمینه‌ای TalkBack ظاهر می‌شود. متد performAccessibilityAction فراخوانی این اقدام را پردازش می‌کند. بدون دلیگیت، TalkBack View سفارشی را به عنوان یک ناحیه ساده بدون تعامل درک می‌کرد و کاربر نمی‌توانست با آن تعامل داشته باشد.

تنظیم دسترسی برای TalkBack

پشتیبانی کامل از TalkBack نه تنها contentDescription، بلکه مدیریت فوکوس، LiveRegion برای به‌روزرسانی‌های پویا، آزمایش با صفحه‌خوان فعال و تطبیق با نسخه‌های مختلف Android را شامل می‌شود.

LiveRegion برای محتوای پویا

وقتی محتوای صفحه بدون اقدام صریح کاربر تغییر می‌کند (مثلاً اعلان پیام جدید ظاهر می‌شود یا شمارنده لایک‌ها به‌روز می‌شود)، TalkBack باید اعلان دریافت کند. برای این کار از ویژگی android:accessibilityLiveRegion برای View در XML یا متد setAccessibilityLiveRegion() در کد استفاده می‌شود. مقدار polite اعلان را پس از اتمام صداگذاری جاری اضافه می‌کند و مقدار assertive بلافاصله آن را قطع می‌کند.

kotlin
val statusText = TextView(this)
statusText.accessibilityLiveRegion =
    View.ACCESSIBILITY_LIVE_REGION_POLITE

// هنگام به‌روزرسانی متن، TalkBack به طور خودکار
// تغییر را اعلام می‌کند
statusText.text = "پیام جدید از آنّا"

// برای اعلان‌های بحرانی — assertive
errorBanner.accessibilityLiveRegion =
    View.ACCESSIBILITY_LIVE_REGION_ASSERTIVE

LiveRegion — معادل UIAccessibility.post در iOS است. برای اکثر به‌روزرسانی‌ها از polite استفاده کنید (پیام‌های جدید، به‌روزرسانی وضعیت) و assertive فقط برای خطاهای بحرانی (پرداخت ناموفق، قطع اتصال). استفاده بیش از حد از assertive تجربه کاربری منفی ایجاد می‌کند — TalkBack دائماً صداگذاری جاری را قطع می‌کند.

گروه‌بندی و ارائه‌دهندگان دسترسی

برای صفحات پیچیده که چندین View یک واحد منطقی تشکیل می‌دهند، از AccessibilityNodeProvider یا focusSearch برای بازنویسی ناوبری استفاده می‌شود. مثلاً یک تقویم سفارشی با ۴۲ خانه (۶ هفته × ۷ روز) نباید کاربر را مجبور به پیمایش همه ۴۲ عنصر برای رفتن به بلوک بعدی کند. توسعه‌دهنده می‌تواند خانه‌ها را در گروه‌های منطقی ترکیب کند: ماه → هفته → روز.

برای Jetpack Compose از اصلاح‌کننده .semantics {} استفاده می‌شود که API مشابهی ارائه می‌دهد: contentDescription، liveRegion، stateDescription، disabled و customActions. Compose همچنین از mergeDescendants برای ترکیب语义‌های فرزند در یکی پشتیبانی می‌کند که گروه‌بندی عناصر را بدون تنظیم دستی accessibilityDelegate برای هر View ساده می‌کند.

kotlin
Button(
    onClick = { sendMessage() },
    modifier = Modifier.semantics {
        contentDescription("ارسال پیام")
        stateDescription("آماده ارسال")
    }
) {
    Icon(Icons.Filled.Send, "ارسال")
}

آزمایش TalkBack از طریق دستگاه فیزیکی یا شبیه‌ساز با سرویس فعال انجام می‌شود. توصیه می‌شود سناریوهای کلیدی کاربر را با صفحه خاموش (Screen Curtain) طی کنید — این فقدان کامل بازخورد بصری را شبیه‌سازی می‌کند. Android همچنین Accessibility Scanner را ارائه می‌دهد — ابزاری برای تشخیص خودکار مشکلات دسترسی که عناصر بدون contentDescription، مناطق لمسی خیلی کوچک و کنتراست پایین را برجسته می‌کند.

سوالات متداول

چگونه TalkBack را در Android فعال کنیم؟

تنظیمات → دسترسی → TalkBack → فعال. برای فعال‌سازی سریع از فشار همزمان هر دو کلید صدا به مدت ۳ ثانیه استفاده می‌شود. Google Assistant همچنین می‌تواند TalkBack را با فرمان صوتی «TalkBack را فعال کن» روشن کند.

TalkBack چه تفاوتی با VoiceOver دارد؟

TalkBack — صفحه‌خوان برای Android، VoiceOver — برای iOS. TalkBack از AccessibilityService و فوکوس دسترسی با قاب زرد استفاده می‌کند، در حالی که VoiceOver از UIAccessibility و rotator. حرکات و منوها متفاوت هستند: TalkBack دارای کشیدن‌های L-shaped برای منوی سراسری است.

چگونه برنامه را با TalkBack سازگار کنیم؟

برای همه ImageViewها و عناصر سفارشی contentDescription تنظیم کنید. از importantForAccessibility برای پنهان کردن عناصر تزئینی استفاده کنید. accessibilityLiveRegion را برای به‌روزرسانی‌های پویا پیکربندی کرده و با Accessibility Scanner بررسی کنید. در Compose از اصلاح‌کننده .semantics{} استفاده کنید.

AccessibilityNodeInfo چیست؟

این یک شیء است که عنصر رابط کاربری را در درخت دسترسی نشان می‌دهد. شامل متن، نوع، وضعیت، موقعیت و فهرست اقدامات است. TalkBack این درخت را برای ناوبری پیمایش می‌کند. توسعه‌دهنده می‌تواند آن را از طریق AccessibilityDelegate یا ویژگی‌های XML تغییر دهد.

چرا TalkBack دکمه من را صداگذاری نمی‌کند؟

importantForAccessibility را بررسی کنید — ممکن است روی NO تنظیم شده باشد. مطمئن شوید contentDescription برای عناصر بدون متن تنظیم شده است. برای Viewهای سفارشی AccessibilityDelegate با onInitializeAccessibilityNodeInfo پیاده‌سازی کنید. از Accessibility Scanner برای تشخیص استفاده کنید.

خلاصه

  • TalkBack — صفحه‌خوان داخلی Android در Android Accessibility Suite با کنترل حرکتی
  • فوکوس دسترسی با قاب زرد عنصر صداگذاری‌شده فعلی را روی صفحه مشخص می‌کند
  • AccessibilityService رویدادهای لمسی را رهگیری کرده و به حرکات صفحه‌خوان تبدیل می‌کند
  • حرکات TalkBack شامل لمس (صداگذاری)، لمس دوبل (فعال‌سازی) و کشیدن‌های L-shaped (منو) است
  • توسعه از طریق contentDescription، AccessibilityDelegate، LiveRegion و semantics در Compose
  • به‌روزرسانی‌های پویا نیاز به android:accessibilityLiveRegion برای اعلان خودکار تغییرات دارند
  • آزمایش با Accessibility Scanner و Screen Curtain برای پشتیبانی باکیفیت الزامی است

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید