फ़ोकस ट्रैवर्सल ऑर्डर

उपयोगकर्ता, 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 मॉडिफ़ायर की मदद से, ट्रैवर्सल के व्यवहार को पसंद के मुताबिक बनाया जा सकता है.

एक डाइमेंशन वाले ट्रैवर्सल ऑर्डर को पसंद के मुताबिक बनाना

एक डाइमेंशन वाले ट्रैवर्सल को बदलने के लिए, FocusRequester के साथ next या previous प्रॉपर्टी की जानकारी दें:

  1. remember { FocusRequester() } की मदद से, 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")
    }
}

टू-डाइमेंशनल ट्रैवर्सल ऑर्डर को पसंद के मुताबिक बनाना

इसी तरह, focusProperties में up, down, start, end, left या right को FocusRequester इंस्टेंस असाइन करके, टू-डाइमेंशनल फ़ोकस ट्रैवर्सल को बदला जा सकता है:

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 असाइन करें.