به تمرکز واکنش نشان دهید

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

مشاهده وضعیت فوکوس با 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 : اگر فوکوس در حال حاضر روی عنصر قفل شده باشد (برای مثال، در طول زیرتعامل‌های modal با استفاده از captureFocus() )، true را برمی‌گرداند. در حین ضبط، تلاش برای انتقال فوکوس به عناصر دیگر، فوکوس را پاک نمی‌کند.
Modifier.onFocusChanged { focusState ->
    val isFocused = focusState.isFocused
    val hasFocus = focusState.hasFocus
    val isCaptured = focusState.isCaptured
}
{% کلمه به کلمه %} {% فعل کمکی %} {% کلمه به کلمه %} {% فعل کمکی %}