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