واکنش به فوکوس

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

مشاهده وضعیت تمرکز با onFocusChanged

اصلاح‌کننده onFocusChanged هرگاه عنصری تمرکز را به‌دست آورد یا ازدست بدهد، شیء FocusState را ارائه می‌دهد.

برای مثال، می‌توانید تغییرات فوکوس را برای به‌روزرسانی وضعیت مؤلفه سفارشی مشاهده کنید (مانند تغییر رنگ حاشیه عنصر یا راه‌اندازی پویانمایی):

var color by remember { mutableStateOf(Color.White) }
Card(
    modifier = Modifier
        .onFocusChanged {
            color = if (it.isFocused) Red else White
        }
        .border(5.dp, color)
) {}

در این مثال، remember رنگ حاشیه را در سراسر بازترکیب‌ها ذخیره می‌کند و رنگ حاشیه هر زمان که حالت تمرکز عنصر تغییر می‌کند به‌روز می‌شود.

ویژگی‌های FocusState

شیء FocusState که به onFocusChanged ارسال شده است سه ویژگی کلیدی ارائه می‌دهد:

  • isFocused: اگر ترکیب‌پذیر خاصی که این اصلاح‌کننده به آن متصل است درحال‌حاضر تمرکز ورودی فعال داشته باشد، true را برمی‌گرداند.
  • hasFocus: اگر این composable یا هرکدام از composableهای فرزند آن درحال‌حاضر متمرکز شده باشد، true را برمی‌گرداند. این ویژگی برای محفظه‌های والد (مانند کارت‌ها یا نوارابزارها) که باید بدانند چه زمانی هر فرزند درون آن‌ها فعال است، مفید است.
  • isCaptured: اگر تمرکز درحال‌حاضر روی عنصر قفل شده باشد، true را برمی‌گرداند (برای مثال، درطول تعاملات فرعی مدال بااستفاده از captureFocus()). درحالی‌که ضبط شده است، تلاش برای انتقال تمرکز به عناصر دیگر تمرکز را پاک نمی‌کند.
Modifier.onFocusChanged { focusState ->
    val isFocused = focusState.isFocused
    val hasFocus = focusState.hasFocus
    val isCaptured = focusState.isCaptured
}