ফোকাস ট্রাভার্সাল অর্ডার

ব্যবহারকারীরা Tab কী বা দিকনির্দেশক (তীরচিহ্ন / ডি-প্যাড) কী ব্যবহার করে UI এলিমেন্ট জুড়ে কীবোর্ড ফোকাস সরাতে পারেন:

  • Tab / Shift+Tab: এক-মাত্রিক উপস্থিতির ক্রমে ফোকাস সামনে বা পিছনে সরান।
  • দিকনির্দেশক কী: ফোকাসকে দ্বিমাত্রিকভাবে সরান (উপরে, নিচে, বাঁদিকে এবং ডানদিকে)।

এক-মাত্রিক ফোকাস ট্রাভার্সাল

এক-মাত্রিক ফোকাস ট্রাভার্সালে, Tab কী স্ক্রিনে ভিজ্যুয়াল উপস্থিতির ক্রম অনুযায়ী UI-এর মাধ্যমে ফোকাসকে এগিয়ে নিয়ে যায়।

যেমন, চারটি বোতাম সারিতে সাজানো থাকলে:

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

ট্যাব কী প্রেস করলে, ফোকাস ক্রমানুসারে নিম্নলিখিত ক্রমে বোতামগুলির মধ্যে সরে যায়:

  1. ১ম বোতাম (উপরে-শুরু)
  2. ২য় বোতাম (উপরের দিকে)
  3. ৩য় বোতাম (নিচে-শুরু)
  4. ৪র্থ বোতাম (নিচের-শেষ)

শেষ এলিমেন্টে Tab প্রেস করলে, প্রথম ফোকাস টার্গেটে ফিরে যাওয়া যায়। Shift+Tab প্রেস করলে ফোকাস উল্টো ক্রমে সরে যায়।

দ্বিমাত্রিক ফোকাস ট্রাভার্সাল

কীবোর্ডের তীরচিহ্নযুক্ত কী প্রেস করলে অথবা ডি-প্যাড ব্যবহার করলে টু-ডাইমেনশনাল ফোকাস ট্রাভার্সাল ট্রিগার হয়।

দ্বিমাত্রিক ট্রাভার্সালে, সিস্টেমটি অনুরোধ করা দিকে সবচেয়ে কাছের টার্গেট নির্ধারণ করতে UI এলিমেন্টের জ্যামিতিক স্থানাঙ্ক এবং স্থানিক সীমানা পরীক্ষা করে।

দ্বিমাত্রিক ফোকাস ট্রাভার্সাল র‍্যাপ করা যায় না। ব্যবহারকারী সবচেয়ে নিচের এলিমেন্টে ফোকাস করার সময় নিচের দিকে কী প্রেস করলে, স্ক্রিনের সবচেয়ে উপরে জাম্প করার পরিবর্তে সেই এলিমেন্টেই ফোকাস থেকে যায়।

পয়েন্টার ক্লিকের মাধ্যমে ফোকাস ট্রাভার্সাল রিসেট করা

ডেস্কটপ বা বড় স্ক্রিনের ডিভাইসে ফিজিক্যাল কীবোর্ড এবং মাউস বা টাচপ্যাডের মধ্যে অদলবদল করার সময়:

  • ট্যাপ বা ক্লিক করার মাধ্যমে ফোকাস সরিয়ে দেওয়া: মাউস বা টাচপ্যাড ব্যবহার করে ইন্টার‍্যাক্টিভ নয় এমন স্পেসে ক্লিক বা ট্যাপ করলে, অ্যাক্টিভ এলিমেন্ট থেকে ফোকাস সরে যায়।
  • ট্রাভার্সাল রিস্টার্ট করা: ফোকাস সরিয়ে দেওয়ার পরে, পরের বার ট্যাব কী প্রেস করলে, আগে অ্যাক্টিভ থাকা এলিমেন্ট থেকে শুরু করার পরিবর্তে, ভিজ্যুয়াল অ্যাপিয়ারেন্সের ক্রম অনুযায়ী প্রথম ফোকাস টার্গেট থেকে ওয়ান-ডাইমেনশনাল ট্রাভার্সাল রিস্টার্ট হয়। এটি টু-ডাইমেনশনাল ফোকাস ট্রাভার্সালের মতোই। দিকনির্দেশক কী, কীবোর্ড ফোকাসকে অনুরোধ করা দিকে সবচেয়ে কাছের ফোকাস টার্গেটে সরিয়ে দেয়।

প্রোগ্রাম্যাটিক্যালি ফোকাস সরানোর ব্যাপারে আরও জানতে, ফোকাস সরানো ও মুছে দেওয়া দেখুন।

ফোকাস ট্র্যাভার্সাল অর্ডার কাস্টমাইজ করুন

আপনি focusProperties মডিফায়ারের সাহায্যে ট্রাভার্সাল আচরণ কাস্টমাইজ করতে পারবেন।

এক-মাত্রিক ট্র্যাভার্সাল অর্ডার কাস্টমাইজ করুন

এক-মাত্রিক ট্রাভার্সাল ওভাররাইড করতে, FocusRequester সহ next বা previous প্রপার্টি নির্দিষ্ট করুন:

  1. remember { FocusRequester() } দিয়ে একটি FocusRequester অবজেক্ট তৈরি করুন।
  2. focusRequester মডিফায়ার ব্যবহার করে টার্গেট কম্পোজেবলের সাথে FocusRequester অ্যাটাচ করুন।
  3. সোর্স কম্পোজেবলে focusProperties মডিফায়ার প্রয়োগ করুন এবং FocusRequester-কে next (ট্যাব-এর জন্য) বা previous (Shift+ট্যাব-এর জন্য) হিসেবে অ্যাসাইন করুন।

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 অ্যাসাইন করুন।