ترتیب پیمایش فوکوس

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

  • 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، فوکوس را به ترتیب معکوس جابجا می‌کند.

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

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

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

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

تنظیم مجدد پیمایش فوکوس با کلیک‌های اشاره‌گر

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

  • پاک کردن فوکوس با لمس یا کلیک : کلیک یا لمس روی فضای غیرتعاملی با ماوس یا صفحه لمسی، فوکوس را از عنصر فعال آزاد می‌کند.
  • شروع مجدد پیمایش : پس از پاک شدن فوکوس، فشردن کلید Tab بعدی، پیمایش یک‌بعدی را به ترتیب ظاهر بصری، در اولین هدف فوکوس ، مجدداً آغاز می‌کند، نه اینکه از عنصر فعال قبلی ادامه یابد. این عمل مشابه پیمایش فوکوس دوبعدی است. کلیدهای جهت‌دار، فوکوس صفحه‌کلید را به نزدیکترین هدف فوکوس در جهت درخواستی منتقل می‌کنند.

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

سفارشی‌سازی ترتیب پیمایش فوکوس

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

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

برای لغو پیمایش یک بعدی، ویژگی next یا previous را با FocusRequester مشخص کنید:

  1. یک شیء FocusRequester با استفاده از remember { FocusRequester() } ایجاد کنید.
  2. با استفاده از اصلاحگر focusRequester FocusRequester به کامپوننت هدف (target composable) متصل کنید.
  3. اصلاح‌کننده focusProperties را به منبع composable اعمال کنید و 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 را اختصاص دهید.

{% کلمه به کلمه %} {% فعل کمکی %} {% کلمه به کلمه %} {% فعل کمکی %}