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

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

إلغاء ترتيب الاجتياز أحادي البعد

لتغيير ترتيب الاجتياز الافتراضي للتنقل أحادي البعد، يمكنك إنشاء مجموعة من المراجع، واحدة لكل عنصر يمكن التركيز عليه:

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

بعد ذلك، استخدِم مفتاح التعديل focusRequester لربط كل عنصر بمادة مركّبة:

Column {
    Row {
        TextButton({}, Modifier.focusRequester(first)) { Text("First field") }
        TextButton({}, Modifier.focusRequester(third)) { Text("Third field") }
    }

    Row {
        TextButton({}, Modifier.focusRequester(second)) { Text("Second field") }
        TextButton({}, Modifier.focusRequester(fourth)) { Text("Fourth field") }
    }
}

يمكنك الآن استخدام مفتاح التعديل focusProperties لتحديد ترتيب مسح مخصّص:

Column {
    Row {
        TextButton(
            {},
            Modifier
                .focusRequester(first)
                .focusProperties { next = second }
        ) {
            Text("First field")
        }
        TextButton(
            {},
            Modifier
                .focusRequester(third)
                .focusProperties { next = fourth }
        ) {
            Text("Third field")
        }
    }

    Row {
        TextButton(
            {},
            Modifier
                .focusRequester(second)
                .focusProperties { next = third }
        ) {
            Text("Second field")
        }
        TextButton(
            {},
            Modifier
                .focusRequester(fourth)
                .focusProperties { next = first }
        ) {
            Text("Fourth field")
        }
    }
}

إلغاء ترتيب الاجتياز الثنائي الأبعاد

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

TextButton(
    onClick = {},
    modifier = Modifier
        .focusRequester(fourth)
        .focusProperties {
            down = third
            right = second
        }
) {}

لا يستخدم هذا الأسلوب أسهم لوحة المفاتيح بشكل فعال فحسب، بل سيعمل مع لوحات التحكّم والعصي على وحدات التحكم السلكية واللاسلكية.