ترتیب پیمایش کانونی

کاربران می‌توانند تمرکز صفحه‌کلید را در عناصر میانای کاربر بااستفاده از کلید جهش یا کلیدهای جهت‌نما (کلیدهای پیکان / پد کنترل) جابه‌جا کنند:

  • Tab / Shift+Tab: فوکوس را به‌ترتیب ظاهر یک‌بعدی به جلو یا عقب حرکت می‌دهد.
  • کلیدهای جهت‌دار: تمرکز را به‌صورت دوبعدی حرکت می‌دهد (بالا، پایین، چپ، و راست).

پیمایش تمرکز یک‌بعدی

در پیمایش تمرکز یک‌بعدی، کلید جهش تمرکز را براساس ترتیب ظاهر بصری در صفحه در میان میانای کاربر پیش می‌برد.

برای مثال، وقتی چهار دکمه در ردیف‌هایی چیده شده‌اند:

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

با فشار دادن کلید جهش، تمرکز به‌ترتیب روی دکمه‌ها جابه‌جا می‌شود:

  1. دکمه اول (بالا-شروع)
  2. دکمه دوم (بالا)
  3. دکمه سوم (پایین-شروع)
  4. دکمه چهارم (پایین-انتها)

فشار دادن کلید جهش روی عنصر نهایی، به اولین هدف تمرکز برمی‌گردد. با فشار دادن تبدیل+جهش، تمرکز به‌ترتیب معکوس جابه‌جا می‌شود.

پیمایش فوکوس دوبعدی

فشار دادن کلیدهای جهت‌نمای صفحه‌کلید یا استفاده از پد کنترل باعث پیمایش تمرکز دوبعدی می‌شود.

در پیمایش دوبعدی، سیستم مختصات هندسی و مرزهای فضایی عناصر میانای کاربر را بررسی می‌کند تا نزدیک‌ترین هدف را در جهت درخواست‌شده تعیین کند.

پیمایش تمرکز دوبعدی به‌صورت چرخشی نیست. اگر کاربر کلید پایین را فشار دهد درحالی‌که روی پایین‌ترین عنصر تمرکز شده است، تمرکز روی آن عنصر باقی می‌ماند و به بالای صفحه نمی‌پرد.

بازنشانی پیمایش فوکوس با کلیک‌های اشاره‌گر

هنگام جابه‌جایی بین صفحه‌کلید فیزیکی و موشواره یا صفحه لمسی در رایانه یا دستگاه‌های دارای صفحه‌نمایش بزرگ:

  • پاک کردن تمرکز با تک‌ضرب زدن یا کلیک کردن: کلیک کردن یا تک‌ضرب زدن روی فضای غیرتعاملی با موشواره یا صفحه لمسی، تمرکز را از عنصر فعال برمی‌دارد.
  • بازراه‌اندازی پیمایش: پس‌از پاک شدن تمرکز، فشار بعدی کلید 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 را اختصاص دهید.