تاكباك — ما هو، إيماءات التحكم والإعداد على Android

المؤلف: IT Sectr نُشر: 2026-05-15 وقت القراءة: 8 دق

TalkBack هو قارئ شاشة مضمّن من Google لـ Android، وهو جزء من حزمة Android Accessibility Suite. يقوم بنطق عناصر الواجهة ويسمح بالتحكم في الجهاز باستخدام الإيماءات، مما يوفر للمستخدمين المكفوفين وضعاف البصر وصولاً كاملاً إلى وظائف الهاتف الذكي. وفقاً لـ Google Accessibility Help (2025)، TalkBack مثبّت مسبقاً على معظم أجهزة Android ويدعم أكثر من 30 لغة بمحركات صوت مختلفة.

النقاط الرئيسية

  • TalkBack هو قارئ شاشة مضمّن من Google لـ Android مع تحكم بالإيماءات وتغذية ردود صوتية
  • بؤر الإتاحة يُسلط الضوء على العنصر الذي ينطقه TalkBack حالياً بإطار أصفر
  • الإيماءات تشمل اللمس (النطق)، النقر مرتين (التنشيط) والتمرير بثلاثة أصابع
  • المطورون يُهيئون إمكانية الوصول عبر contentDescription و AccessibilityNodeInfo
  • TalkBack يتكامل مع Google Assistant وشاشات برايل

ما هو TalkBack؟

TalkBack هو قارئ شاشة لـ Android، طورته Google وهو جزء من Android Accessibility Suite. يوفر تغذية ردود صوتية وتحكماً بالإيماءات للمستخدمين من ذوي الإعاقات البصرية. يعمل TalkBack على الهواتف الذكية والأجهزة اللوحية وتلفازات Smart TV والأجهزة القابلة الارتداء التي تعمل بـ Wear OS.

ظهر TalkBack لأول مرة في Android 1.6 (Donut) عام 2009. في البداية كان مشروعاً منفصلاً، ولكن مع إطلاق Android 4.0 (Ice Cream Sandwich) أصبح جزءً من Android Accessibility Suite — مجموعة خدمات تضم أيضاً Switch Access و Select to Speak. بدءً من Android 10، TalkBack مثبّت مسبقاً على جميع الأجهزة التي تحتوي على خدمات Google Play، بما في ذلك أجهزة الشركاء — Samsung و Xiaomi و Oppo وغيرها.

TalkBack يدعم أكثر من 30 لغة بمحركات صوت مختلفة: Google Text-to-Speech و Samsung TTS ومحركات جهات ثالثة. للعربية، يوفر Google TTS نطقاً طبيعياً ونبرات صحيحة. يمكن للمستخدم ضبط سرعة الكلام ودرجة الصوت واختيار جنس الصوت في إعدادات TalkBack.

كيف يعمل TalkBack؟

يعمل TalkBack استناداً إلى AccessibilityService — آلية نظامية في Android تسمح للتطبيقات باستقبال معلومات عن حالة الواجهة والتفاعل معها برمجياً. عندمت يُفعّل TalkBack، يعترض جميع أحداث اللمس ويحوّلها إلى إيماءات قارئ شاشة خاصة.

بؤر الإتاحة

العنصر الرئيسي في عمل TalkBack هو بؤر الإتاحة. على عكس بؤر الإدخال القياسي، الذي يظهر كتمييز لحقل النص، يتم عرض بؤر الإتاحة كإطار أصفر حول العنصر وهو غير مرئي للمستخدمين بدون TalkBack. عندما يصل بؤر الإتاحة إلى عنصر، يقوم TalkBack بنطق محتواه ونوعه وحالته.

يقوم المستخدم بتحريك بؤر الإتاحة باستخدام الإيماءات: التمرير لليمين — العنصر التالي، التمرير لليسار — العنصر السابق. يتم تصفح العناصر بالترتيب الذي تحدده AccessibilityNodeInfo — شجرة الإتاحة التي يبنيها Android لكل شاشة. يمكن للمطور التأثير على الترتيب من خلال خاصيتي accessibilityTraversalBefore و accessibilityTraversalAfter، وهو أمر مهم بشكل خاص للشاشات المعقدة ذات التصاميم المخصصة.

AccessibilityNodeInfo وشجرة الإتاحة

كل عنصر View على الشاشة يمثّله عقدة في شجرة الإتاحة — كائن AccessibilityNodeInfo. يحتوي هذا الكائن على: نص العنصر (contentDescription أو نص العرض)، نوع العنصر (زر، خانة اختيار، حقل إدخال)، الحالة (مفعّل/معطّل/مختار)، الموقع على الشاشة وقائمة الإجراءات المتاحة. يتصفح TalkBack هذه الشجرة وينطق كل عقدة بترتيب التصفح.

إذا لم يكن للعرض محتوى نصي (u0645ثل ImageView بدون وصف)، فإنه يصبح غير مرئي لـ TalkBack — لن يعلم المستخدم بوجوده. لحل هذه المشكلة، يقوم المطور تعيين contentDescription — وصف نصي ينطقه TalkBack بدلاً من الصمت. يدعم Android أيضاً stateDescription للعناصر ذات الحالة القابلة للتغيير (محدد/غير محدد) و hintText لحقول الإدخال بالتوصيحات.

إيماءات التحكم في TalkBack

يحوّل TalkBack إيماءات Android القياسية إلى إيماءات قارئ شاشة خاصة. تؤدّى معظم العمليات بإصبع واحد أو إصبعين، بينما تكون إيماءات ثلاث أصابع مخصصة للإجراءات العامة.

الإجراءالإيماءالنتيجة
نطق العنصرلمسة واحدةينطق اسم العنصر ونوعه
تنشيطنقرتانضغط زر أو انتقال
التاليتمرير لليمينالعنصر التالي
السابقتمرير لليسارالعنصر السابق
تمريرتمرير بإصبعينتمرير القائمة
قائمة TalkBackتمرير للأعلى-اليسارقائمة الإعدادات العامة

إيماء التمرير للأعلى-اليسار (تمرير على شكل L) يفتح قائمة TalkBack العامة، حيث يمكن للمستخدم تغيير سرعة الكلام، أو تفعيل شاشة التعتيم، أو بدء البرنامج التعليمي أو فتح الإعدادات. يدعم TalkBack أيضاً قائمة سياق للعناصر: يفتح التمرير للأعلى-اليمين قائمة بالإجراءات المتاحة للعنصر الحالي (على سبيل المثال، «نسخ» و«لصق» لحقل نصي أو «حذف» لرسالة دردشة).

TalkBack في تطوير التطبيقات المحمولة

يوفر Android API غنياً لتهيئة إمكانية الوصول. المستوى الأساسي هو contentDescription، ولكن للدعم المتقدّم لـ TalkBack يلزم العمل مع AccessibilityNodeInfo و AccessibilityDelegate و LiveRegion.

ContentDescription والسمات المهمة

السمة android:contentDescription تحدد الوصف النصي للعنصر لـ TalkBack. هي 必要ية لـ ImageView و ImageButton و FloatingActionButton وأي عرض مخصص بدون محتوى نصي. للعناصر القياسية (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 والإجراءات المخصصة

بالنسبة للعروض المخصصة التي لا تستخدم معالجات النقر القياسية، يلزم تجاوز 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 إلى العرض المخصص على أنه منطقة غير تفاعلية عادية، ولن يتمكن المستخدم من التفاعل معه.

إعداد إمكانية الوصول لـ 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 هو المكافئ في Android لـ UIAccessibility.post على iOS. استخدم polite لمعظم التحديثات (رسائل جديدة، تحديثات الحالة) و assertive فقط للأخطاء الحرجة (دفع فاشل، فقدان الاتصال). الاستخدام المفرط لـ assertive يخلق تجربة مستخدم سلبية — سيقاطع TalkBack النطق الحالي بشكل مستمر.

التجميع وموفرو الإتاحة

للشاشات المعقدة حيث تشكّل عدة Views وحدة منطقية واحدة، يستخدم AccessibilityNodeProvider أو focusSearch لتجاوز التنقل. على سبيل المثال، تقويم مخصص بـ 42 خلية (6 أسابيع × 7 أيام) لا يجب أن يجبر المستخدم على التمرير خلال جميع العناصر البالغ عددها 42 للوصول إلى القسم التالي. يمكن للمطور تجميع الخلايا في وحدات منطقية: شهر → أسبوع → يوم.

لـ Jetpack Compose، يوفر معدّل .semantics {} API مماثلاً: contentDescription و liveRegion و stateDescription و disabled و customActions. يدعم Compose أيضاً mergeDescendants لدمج الدلالات الفرعية في دلالة واحدة، مما يبسط تجميع العناصر بدون تكوين مفوض accessibilityDelegate يدوياً لكل عرض.

kotlin
Button(
    onClick = { sendMessage() },
    modifier = Modifier.semantics {
        contentDescription("إرسال رسالة")
        stateDescription("جاهز للإرسال")
    }
) {
    Icon(Icons.Filled.Send, "إرسال")
}

يتم اختبار TalkBack باستخدام جهاز فعلي أو محاكي مع تفعيل الخدمة. يوصى باجتياز سيناريوهات المستخدم الرئيسية مع إطفاء الشاشة (Screen Curtain) — وهذا يحاكي عدم وجود تغذية مرئية بالكامل. يوفر Android أيضاً Accessibility Scanner — أداة للكشف التلقائي عن مشاكل الإتاحة، تقوم بتسليط الضوء على العناصر التي لا تحتوي على contentDescription ومناطق اللمس صغيرة جداً والتباين المنخفض.

الأسئلة الشائعة

كيف تفعيل TalkBack على Android؟

الإعدادات → إمكانية الوصول → TalkBack → تفعيل. للتفعيل السريع، اضغط على مفتاحي الصوت معاً لمدة 3 ثوان. Google Assistant يستطيع أيضاً تفعيل TalkBack بأمر صوتي «فعّل TalkBack».

ما الفرق بين TalkBack و VoiceOver؟

TalkBack هو قارئ شاشة لـ Android، و VoiceOver لـ iOS. TalkBack يستخدم AccessibilityService وبؤر الإتاحة مع إطار أصفر، بينما يستخدم VoiceOver UIAccessibility والدوار. تختلف الإيماءات والقوائم: لدى TalkBack إيماءات على شكل L للقائمة العامة.

كيف أجعل تطبيقي متوافقًا مع TalkBack؟

ضبط contentDescription لجميع ImageView والعناصر المخصصة. استخدم importantForAccessibility لإخفاء العناصر الزخرفية. ضبط accessibilityLiveRegion للتحديثات الديناميكية وتحقق باستخدام Accessibility Scanner. في Compose، استخدم المعدّل .semantics{}.

ما هو AccessibilityNodeInfo؟

هو كائن يمثّل عنصر واجهة في شجرة الإتاحة. يحتوي على نص ونوع وحالة وموقع وقائمة إجراءات. TalkBack يتصفح هذه الشجرة للتنقل. يمكن للمطور تعديله من خلال AccessibilityDelegate أو سمات XML.

لماذا لا ينطق TalkBack زري؟

تحقق من importantForAccessibility — قد يكون مضبوطاً على NO. تأكد من أن contentDescription محدّد للعناصر بدون نص. للعروض المخصصة، قم بتنفيذ AccessibilityDelegate مع onInitializeAccessibilityNodeInfo. استخدم Accessibility Scanner للتشخيص.

الملخص

  • TalkBack هو قارئ شاشة مضمّن في Android بمجموعة Android Accessibility Suite مع تحكم بالإيماءات
  • بؤر الإتاحة بإطار أصفر يوضح العنصر الذي يتم نطقه حالياً على الشاشة
  • AccessibilityService يعترض أحداث اللمس ويحوّلها إلى إيماءات قارئ شاشة
  • الإيماءات تشمل اللمس (النطق)، النقر مرتين (التنشيط) والتمرير على شكل L (القائمة)
  • التطوير عبر contentDescription و AccessibilityDelegate و LiveRegion و semantics في Compose
  • التحديثات الديناميكية تتطلب android:accessibilityLiveRegion للإعلان التلقائي عن التغييرات
  • الاختبار باستخدام Accessibility Scanner و Screen Curtain ضروري لتقديم دعم عالي الجودة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا