في الخدمات المخصصة لتسهيل الاستخدام، مثل برامج قراءة الشاشة، يعتمد المستخدمون على تصنيفات المحتوى لفهم معنى العناصر في الواجهة.
في بعض الحالات، مثلاً عند عرض المعلومات في رسم بياني داخل عنصر، توفّر تصنيفات المحتوى وصفًا نصيًا للمعنى أو الإجراء المرتبط بالعنصر.
وإذا لم توفّر العناصر في واجهة المستخدم تصنيفات المحتوى، قد يصعب على بعض المستخدمين فهم المعلومات المعروضة لهم أو تنفيذ الإجراءات في الواجهة.
التنفيذ
العرضعند استخدام أنواع معيّنة من عنصر View
في واجهة، يجب أن توفّر هذه العناصر تصنيفات المحتوى التي تصف الغرض أو الإجراء المرتبط بعنصر View
هذا.
كيفية توفير تصنيفات المحتوى
android:contentDescription
عند استخدام ImageView
أو ImageButton
أو CheckBox
أو عنصر View
آخر يعرض المعلومات في رسم بياني، استخدِم السمة android:contentDescription
لتوفير تصنيف للمحتوى لعنصر View
هذا.
يعتمد تصنيف المحتوى في بعض الأحيان على معلومات لا تتوفّر إلا في وقت التشغيل، أو قد يتغير معنى عنصر View
بمرور الوقت. على سبيل المثال، قد يتغير زر التشغيل إلى زر إيقاف مؤقت أثناء تشغيل الموسيقى. في هذه الحالات، استخدِم View#setContentDescription(CharSequence contentDescription)
لتعديل تصنيف المحتوى في الوقت المناسب.
عندما تصف الخدمة المخصّصة لتسهيل الاستخدام عنصر ViewGroup
، إنّها تضم عادةً تصنيفات المحتوى من عناصر View
الثانوية. لإلغاء هذا السلوك وإظهار أنّك تريد توفير وصفك الخاص لهذا العنصر وعناصر View
الثانوية غير القابلة للتركيز، يجب ضبط contentDescription
على ViewGroup
. وقد تحتاج إلى تضمين تصنيفات المحتوى من عناصر View
الثانوية داخل contentDescription
عند ضبطه على ViewGroup
.
android:hint
بالنسبة إلى EditTexts
أو TextViews
القابلة للتعديل، استخدِم السمة android:hint
للإشارة إلى الغرض من الحقل النصي. ويجب عدم استخدام android:contentDescription
باعتبارها تصنيف محتوى لعناصر View
القابلة للتعديل.
android:labelFor
استخدِم السمة android:labelFor
للإشارة إلى أنّ أحد عناصر View
سيعمل كتصنيف محتوى لعنصر View
آخر.
الحالات التي لا تتطلب توفير تصنيفات المحتوى
يجب عدم توفير تصنيفات المحتوى بشكل محدد في بعض الحالات، مثلاً:
- إذا كان النص المعروض في
TextView
(أو فئاته الفرعية) مقدَّمًا تلقائيًا للخدمات المخصصة لتسهيل الاستخدام. وعادةً ما تكون تصنيفات المحتوى الإضافية غير ضرورية. - إذا كانت الصور الزخرفية أو الصور لا تحمل معلومات مفيدة، وبالتالي لا تتطلب تصنيفات محتوى من الناحية البيانية. في هذه الحالات، يجب ضبط السمة
android:contentDescription
على القيمة"@null"
أو السمةandroid:importantForAccessibility
على القيمة"no"
.
للمزيد من المعلومات، يمكنك الاطّلاع على تطبيق تصنيفات المحتوى في تدريب مطورّي برامج Android وأدلة واجهات برمجة التطبيقات.
عند استخدام أنواع معيّنة من عناصر قابلة للإنشاء في واجهة، يجب أن تحتوي هذه العناصر على تصنيفات محتوى تصف الغرض أو الإجراء المرتبط بكل عنصر.
كيفية توفير تصنيفات المحتوى
مواصفات المحتوى
يجب ضبط وصف المحتوى لتوفير تصنيف المحتوى المخصص للعنصر Image
أو Icon
أو عنصر آخر قابل للإنشاء منخفض المستوى يعرض معلومات بيانية.
- قد يعتمد تصنيف المحتوى على معلومات وقت التشغيل وقد يتغير معنى العنصر القابل للإنشاء. على سبيل المثال، قد يتغير زر التشغيل إلى زر إيقاف مؤقت أثناء تشغيل الموسيقى.
- في هذه الحالات، يجب استخدام State حتى يتمكن Jetpack Compose من الاطّلاع على التغييرات في وصف المحتوى وإعادة إنشائه بالقيمة الجديدة. كيفية استخدام State وJetpack Compose
- في بعض الحالات، قد تحتاج إلى دمج العناصر في عنصر واحد يمكن التركيز عليه ويجمع تصنيفات المحتوى من العناصر التابعة له. كيفية دمج العناصر
مَعلمة التصنيف
بعض العناصر القابلة للإنشاء، مثل TextField
، تتوافق مع مَعلمة label
الاختيارية. وعند ضبط التصنيف، يعرض العنصر المحتوى القابل للإنشاء الذي تم ضبطه على label
. يمكن استخدام الخدمات المخصصة لتسهيل الاستخدام من أجل وصف العنصر القابل للإنشاء.
الحالات التي لا تتطلب توفير تصنيفات المحتوى
في بعض الحالات، يجب عدم إضافة تصنيفات المحتوى:
- إذا كان النص المعروض في
Text
، أو عناصر أخرى قابلة للإنشاء تحتوي علىText
، مقدّمًا تلقائيًا لخدمات تسهيل الاستخدام - إذا كانت الصور الزخرفية أو الصور لا تحمل معلومات ذات معنى موضّحة في رسم بياني
- في هذه الحالات، يجب ضبط المعلمة
contentDescription
أو السمةModifier.semantics#contentDescription
علىnull
أو طلبModifier#clearAndSetSemantics
.
- في هذه الحالات، يجب ضبط المعلمة
التصميم
عند تصميم واجهة مستخدم، يجب التفكير في كيفية تصنيف محتوى الرسومات البيانية لمستخدمي الخدمات المخصصة لتسهيل الاستخدام. ويجب أن تتبع تصنيفات المحتوى المبادئ التالية:
- الإيجاز ووصف المعنى أو الإجراء المرتبط بالعنصر بوضوح
- عدم تضمين نوع أو حالة عنصر في تصنيف المحتوى الخاص به
- وصف الإجراء، وليس الرسم البياني، في حال كان العنصر مرتبطًا بإجراء
- عدم إعطاء تعليمات للمستخدم بشأن كيفية التفاعل مع العنصر بشكل محدد
للمزيد من المعلومات، يمكنك الاطّلاع على إرشادات الكتابة من أجل تسهيل الاستخدام في التصميم المتعدد الأبعاد.
الاختبار
للتحقق يدويًا من أنّ واجهة مستخدم التطبيق تشتمل على تصنيفات المحتوى، يُرجى اتّباع الخطوات التالية:
- تفعيل TalkBack
- فتح التطبيق
- استخدام إيماءات التنقل الخطية لنقل تركيز تسهيل الاستخدام إلى كل عنصر على الشاشة
- إذا كان TalkBack ينقل التركيز إلى عنصر معيّن، ولكن لا يقدّم شرحًا مفيدًا لهذا العنصر، أو يقول رسالة "غير مصنَّف"، هذا يعني أنّ العنصر لا يتضمّن على الأرجح تصنيفًا للمحتوى.
يمكن لأدوات الاختبار التلقائية في Android اكتشاف تصنيفات المحتوى غير المتوفّرة. ويمكنك استخدام Accessibility Scanner لنظام التشغيل Android من أجل اختبار تطبيقك يدويًا على الجهاز. ولإجراء اختبارات مبرمجة، يجب تفعيل فحص سهولة الاستخدام في Espresso وRobolectric.