ترتيب اجتياز التركيز

يمكن للمستخدمين نقل تركيز لوحة المفاتيح على عناصر واجهة المستخدم باستخدام مفتاح Tab أو مفاتيح الاتجاهات (الأسهم / لوحة التحكم):

  • ‫Tab / Shift+Tab: لنقل التركيز للأمام أو للخلف في ترتيب المظهر أحادي البُعد
  • مفاتيح الاتجاهات: لنقل التركيز في بُعدَين (أعلى وأسفل ويسار ويمين)

التنقّل في التركيز أحادي البُعد

في التنقّل الأحادي البُعد، يؤدي الضغط على مفتاح Tab إلى نقل التركيز في واجهة المستخدم استنادًا إلى ترتيب الظهور المرئي على الشاشة.

على سبيل المثال، عند ترتيب أربعة أزرار في صفوف:

Column {
    Row {
        Button(onClick = { /* ... */ }) { Text("1st") }
        Button(onClick = { /* ... */ }) { Text("2nd") }
    }
    Row {
        Button(onClick = { /* ... */ }) { Text("3rd") }
        Button(onClick = { /* ... */ }) { Text("4th") }
    }
}

يؤدي الضغط على مفتاح Tab إلى نقل التركيز بالتسلسل عبر الأزرار بالترتيب التالي:

  1. الزر الأول (أعلى اليمين)
  2. الزر الثاني (في أعلى الطرف)
  3. الزر الثالث (أسفل يمين الشاشة)
  4. الزر الرابع (في أسفل اليمين)

يؤدي الضغط على مفتاح التبويب (Tab) في العنصر الأخير إلى العودة إلى هدف التركيز الأول. يؤدي الضغط على Shift+Tab إلى نقل التركيز بترتيب عكسي.

التنقّل في التركيز ثنائي الأبعاد

يؤدي الضغط على مفاتيح الأسهم في لوحة المفاتيح أو استخدام لوحة التحكّم إلى تفعيل التنقّل بين العناصر التي يتم التركيز عليها في بُعدَين.

في التنقّل الثنائي الأبعاد، يفحص النظام الإحداثيات الهندسية والحدود المكانية لعناصر واجهة المستخدم لتحديد أقرب هدف في الاتجاه المطلوب.

لا يتم التفاف التنقّل في التركيز ثنائي الأبعاد. إذا ضغط المستخدم على مفتاح السهم المتّجه للأسفل أثناء التركيز على العنصر في أسفل الشاشة، يظل التركيز على هذا العنصر بدلاً من الانتقال إلى أعلى الشاشة.

إعادة ضبط التنقّل في التركيز باستخدام نقرات المؤشر

عند التبديل بين لوحة مفاتيح خارجية وماوس أو لوحة لمس على أجهزة الكمبيوتر المكتبي أو الأجهزة ذات الشاشات الكبيرة:

  • إزالة التركيز عند النقر: يؤدي النقر على مساحة غير تفاعلية باستخدام الماوس أو لوحة اللمس إلى إزالة التركيز من العنصر النشط.
  • إعادة بدء التنقّل: بعد محو التركيز، يؤدي الضغط على مفتاح Tab التالي إلى إعادة بدء التنقّل أحادي البُعد عند هدف التركيز الأول بترتيب المظهر المرئي، بدلاً من الاستئناف من العنصر النشط سابقًا. وهو مماثل للتنقّل في التركيز ثنائي الأبعاد. تنقل مفاتيح الاتجاهات تركيز لوحة المفاتيح إلى أقرب هدف تركيز في الاتجاه المطلوب.

للحصول على تفاصيل حول محو التركيز آليًا، يُرجى الاطّلاع على نقل التركيز ومحوه.

تخصيص ترتيب تمرير التركيز

يمكنك تخصيص سلوك التنقّل باستخدام المُعدِّل focusProperties.

تخصيص ترتيب التمرير الأحادي البُعد

لتجاوز التنقّل الأحادي البُعد، حدِّد السمة next أو previous باستخدام FocusRequester:

  1. أنشئ كائن FocusRequester باستخدام remember { FocusRequester() }.
  2. أرفِق FocusRequester بالدالة المركّبة المستهدَفة باستخدام المُعدِّل focusRequester.
  3. طبِّق المُعدِّل focusProperties على الدالة المركّبة المصدر وعيِّن FocusRequester على next (للمفتاح Tab) أو previous (للمفتاحَين Shift+Tab).

val (first, second, third) = remember { FocusRequester.createRefs() }

Column {
    Button(
        onClick = { /* ... */ },
        modifier = Modifier
            .focusRequester(first)
            .focusProperties { next = third }
    ) {
        Text("First (Tab jumps to Third)")
    }
    Button(
        onClick = { /* ... */ },
        modifier = Modifier.focusRequester(second)
    ) {
        Text("Second")
    }
    Button(
        onClick = { /* ... */ },
        modifier = Modifier.focusRequester(third)
    ) {
        Text("Third")
    }
}

تخصيص ترتيب التمرير الثنائي الأبعاد

وبالمثل، يمكنك إلغاء التنقّل في التركيز ثنائي الأبعاد من خلال تخصيص مثيلات FocusRequester لـ up أو down أو start أو end أو left أو right ضمن focusProperties:

val (topButton, bottomButton) = remember { FocusRequester.createRefs() }

Button(
    onClick = { /* ... */ },
    modifier = Modifier
        .focusRequester(topButton)
        .focusProperties {
            down = bottomButton
            right = bottomButton
        }
) {
    Text("Top button")
}
Button(
    onClick = { /* ... */ },
    modifier = Modifier.focusRequester(bottomButton)
) {
    Text("Bottom button")
}

لحظر التنقّل بالتركيز في اتجاه معيّن (على سبيل المثال، عند حدود التنسيق)، يمكنك تخصيص FocusRequester.Cancel لهذه السمة (على سبيل المثال، down = FocusRequester.Cancel). للاحتفاظ صراحةً بخوارزمية التنقّل التلقائية للنظام في اتجاه معيّن، يمكنك تخصيص FocusRequester.Default.