تطوير Android / المتوسط: الحالة والبيانات والميزات الشاملة / الدرس 12
تصميم ميزات متاحة ومتكيفة
احفظ مهمة القراءة نفسها عبر تغير النوافذ والتقنيات المساعدة والإدخال غير اللمسي.
في هذه الصفحة
أهداف الدرس
- تكيّف مع قيود النافذة الحالية مع حفظ حالة المهمة.
- اكشف الدور والحالة والإجراءات عبر الدلالات.
كيّف المهمة إلى جانب الأبعاد
قد يعرض تطبيق قراءة متكيف وجهة واحدة في نافذة ضيقة ولوحتي قائمة وتفاصيل في نافذة أكبر. يظل العنصر المختار مهمة المستخدم نفسها عند تغير العرض. استخدم معلومات النافذة الحالية بدلاً من علم دائم للهاتف أو الجهاز اللوحي، لأن نوافذ سطح المكتب وتقسيم الشاشة والطي والتدوير تغير المساحة. أبقِ ملكية الاختيار والمسودة خارج فرع العرض. ينبغي ألا يعيد التحجيم الاختيار بصمت أو يفقد نموذجاً أو يبدأ تاريخ تنقل غير مرتبط.
اجعل قرارات العرض صريحة
تستطيع دالة سياسة صغيرة تحويل قياس نافذة أو تصنيف مكتبة إلى اختيار عرض. تستخدم الشيفرة الفعلية واجهات التكيف والحدود المناسبة لإصدار مكتبتها بدلاً من نسخ عرض جهاز اعتباطي. يتلقى المثال علماً expanded تقرر مسبقاً لعزل مسؤولية الواجهة. يتلقى الفرعان الاختيار نفسه ودوال الأحداث نفسها. إذا اختفت لوحة فانقل التركيز إلى عنصر باق ذي معنى واحفظ طريقاً إلى المحتوى المخفي بدلاً من ترك مستخدمي لوحة المفاتيح عالقين.
@Composable
fun AdaptiveShelf(expanded: Boolean, selectedId: String?, onSelect: (String) -> Unit) {
if (expanded) {
Row(Modifier.fillMaxSize()) {
Box(Modifier.weight(1f)) { ShelfList(selectedId, onSelect) }
Box(Modifier.weight(2f)) { ShelfDetail(selectedId) }
}
} else {
CompactShelf(selectedId = selectedId, onSelect = onSelect)
}
}
تمثل ShelfList وShelfDetail وCompactShelf مكونات التطبيق. احسب expanded بتكامل النافذة والتكيف في المشروع. يجب أن يوفر المكوّن الضيق طريقاً بين القائمة والتفاصيل؛ يوضح المقتطف الملكية المشتركة ولا ينفذ التنقل.
صِف المعنى الحالي لعنصر التحكم
يحتاج عنصر التحكم إجراءً قابلاً للاكتشاف وحالة قابلة للإدراك. ترمز خانات الاختيار والمفاتيح والأزرار وعناصر التحديد القياسية كثيراً من ذلك. في صف مخصص مجمّع تجنب أباً قابلاً للنقر وابناً ينفذ الإجراء نفسه مستقلاً مرتين. ادمج الدلالات فقط عندما يكون الصف وحدة واحدة واحفظ الأبناء ذوي الإجراءات المستقلة عند الحاجة. استخدم أوصاف حالة مترجمة عندما لا يطابق معنى التحديد الافتراضي المنتج، ولا تلحق كلمات نوع العنصر بكل عنوان بصورة مكررة.
@Composable
fun FinishedControl(finished: Boolean, onFinishedChange: (Boolean) -> Unit) {
Row(
Modifier.fillMaxWidth().toggleable(
value = finished,
role = Role.Checkbox,
onValueChange = onFinishedChange
).padding(16.dp),
verticalAlignment = Alignment.CenterVertically
) {
Checkbox(checked = finished, onCheckedChange = null)
Text(stringResource(R.string.finished_reading))
}
}
استورد toggleable وRole والتخطيط وواجهات Material وأضف finished_reading للموارد المترجمة. لا تملك خانة الاختيار دالة مستقلة لأن الأب يعالج الإجراء، فيتجنب هدفين تفاعليين للحالة نفسها. تحقق من الدلالات المدمجة الناتجة في التطبيق الفعلي.
ادعم ما يتجاوز اللمس
تستبعد الإجراءات المعتمدة على السحب وحده من لا يستطيع الإيماءة. وفّر إجراء وصول صريحاً أو قائمة بديلة للأرشفة وإعادة الترتيب. احفظ ترتيب تركيز منطقي ومؤشراً مرئياً وتفعيلاً بلوحة المفاتيح. أعلن التغذية المهمة للتحقق أو الاكتمال دون إغراق المستخدم بتحديثات منطقة حية مع كل حرف. لا ترمّز فرقاً مطلوباً باللون وحده. احترم تفضيلات النظام للحركة الزخرفية ولا تجعل الحركة الإشارة الوحيدة للنجاح. اختبر المهمة بتفاعل فعلي لا بلقطات ساكنة فقط.
تحقق من التركيبات التي تغيّر السلوك
استخدم مصفوفة مقصودة: نوافذ ضيقة وواسعة وخطوط مكبرة وعربية وإنجليزية وقارئ شاشة ولوحة مفاتيح وقدرات اختيارية معطلة. تتفاعل الأبعاد؛ فقد يكشف خط كبير في نافذة عربية ضيقة عيباً لا يظهر في معاينة كل بعد منفرداً. افحص ترتيب القراءة بعد الانتقالات وبقاء الأخطاء قرب الحقول. تحمي تحققات الدلالات الآلية الأدوار والحالات، بينما يقيّم الاختبار اليدوي بالتقنيات المساعدة منطق الرحلة. دوّن العيوب والتوقعات الملموسة لتبقى إمكانية الوصول قابلة للاختبار لا تفضيلاً بصرياً مبهماً.
الأخطاء الشائعة وإصلاحها
يختفي الاختيار عند توسيع النافذة
- لماذا يحدث؟
- يمتلك كل فرع تخطيط معرّف اختيار منفصلاً.
- كيف تصلحه؟
- ارفع حالة المهمة فوق فرع التكيف.
- كيف تتجنب تكراره؟
- اختبر إعادة التحجيم أثناء مهمة غير مكتملة.
يُعلن عنصر التبديل مرتين
- لماذا يحدث؟
- يكشف الأب والابن إجراءين مكررين.
- كيف تصلحه؟
- امنح عقدة واحدة الإجراء وتحقق من الدلالات المدمجة.
- كيف تتجنب تكراره؟
- اجتز العناصر المخصصة بقارئ شاشة.
تستحيل الأرشفة دون السحب
- لماذا يحدث؟
- لا تملك الإيماءة إجراء وصول مكافئاً.
- كيف تصلحه؟
- أضف قائمة قابلة للاكتشاف أو إجراء دلالياً.
- كيف تتجنب تكراره؟
- راجع لكل إيماءة مسار إدخال بديلاً.
اختبر فهمك
1. تتوسع شاشة قائمة وتفاصيل أثناء فتح مسودة عنوان. ما الذي يستمر وإلى أين ينتقل التركيز؟
اعرض الحل المشروح
احفظ المعرّف والمسودة لدى مالك المهمة المشترك. أبقِ التركيز في المحرر إذا بقيت عقدته ذات معنى، وإلا انقله للمحرر الموافق في العرض الجديد بترتيب قراءة واضح. لا تعد السجل للبداية لمجرد ظهور لوحة ثانية.
2. يظهر الخطأ كحد أحمر حول العنوان فقط. صمّم عقداً أقوى وطريقة تحقق.
اعرض الحل المشروح
أضف رسالة تفسيرية مترجمة ودلالات خطأ مرتبطة بالحقل. أبقِ النص ظاهراً عند التكبير وأعلنه عبر مسار الوصول المعتاد. تحقق من قدرة المستخدم على تحديد الخطأ وفهم التصحيح والتحرير وتأكيد زواله بلوحة المفاتيح وقارئ الشاشة.
أهم ما تعلمته
- ينبغي أن تصمد حالة المهمة أمام تغير العرض.
- تكشف الدلالات المعنى نفسه الذي يعرضه العنصر بصرياً.
- يجمع التحقق الشامل الأتمتة باجتياز المهمة فعلياً.