دکمه های نماد اقداماتی را که کاربران می توانند انجام دهند را نمایش می دهند. دکمههای نماد باید از نمادی با معنای واضح استفاده کنند و معمولاً اقدامات رایج یا پرکاربرد را نشان میدهند.
دو نوع دکمه آیکون وجود دارد:
- پیشفرض : این دکمهها میتوانند عناصر دیگری مانند منو یا جستجو را باز کنند.
- Toggle : این دکمهها میتوانند عملکردهای باینری را نشان دهند که میتوان آنها را روشن یا خاموش کرد، مانند "مورد علاقه" یا "نشانک".

سطح API
از IconButton composable برای پیاده سازی دکمه های آیکون استاندارد استفاده کنید. برای ایجاد سبک های بصری مختلف مانند تونال پر شده، پر شده، یا طرح شده، به ترتیب FilledIconButton ، FilledTonalIconButton و OutlinedIconButton استفاده کنید.
پارامترهای کلیدی برای IconButton عبارتند از:
-
onClick: یک تابع لامبدا که با ضربه زدن کاربر روی دکمه نماد اجرا می شود. -
enabled: یک بولی که وضعیت فعال بودن دکمه را کنترل می کند. وقتیfalse، دکمه به ورودی کاربر پاسخ نمی دهد. -
content: محتوای قابل ترکیب در داخل دکمه، معمولاً یکIcon.
مثال اصلی: دکمه نماد را تغییر دهید
این مثال به شما نشان می دهد که چگونه یک دکمه آیکون جابجایی را پیاده سازی کنید. یک دکمه نماد تغییر ظاهر خود را بر اساس انتخاب یا عدم انتخاب تغییر می دهد.
@Preview @Composable fun ToggleIconButtonExample() { // isToggled initial value should be read from a view model or persistent storage. var isToggled by rememberSaveable { mutableStateOf(false) } IconButton( onClick = { isToggled = !isToggled } ) { Icon( painter = if (isToggled) painterResource(R.drawable.favorite_filled) else painterResource(R.drawable.favorite), contentDescription = if (isToggled) "Selected icon button" else "Unselected icon button." ) } }
نکات کلیدی در مورد کد
- قابلیت ترکیب
ToggleIconButtonExampleیکIconButtonقابل تغییر را تعریف می کند.-
mutableStateOf(false)یک شیءMutableStateایجاد می کند که دارای مقدار بولی، در ابتداfalse. این باعث میشود کهisToggledیک حالت نگهدارنده باشد، به این معنی که Compose هر زمان که مقدار آن تغییر کند، UI را دوباره ترکیب میکند. -
rememberSaveableتضمین میکند که وضعیتisToggledدر تمام تغییرات پیکربندی، مانند چرخش صفحه، باقی میماند.
-
- لامبدا
onClickIconButtonرفتار دکمه را هنگام کلیک کردن مشخص می کند و حالت را بینtrueوfalseتغییر می دهد. - پارامتر
painterIconcomposable به صورت مشروط یکpainterResourceمتفاوت را بر اساس وضعیتisToggledبارگیری می کند. این ظاهر بصری آیکون را تغییر می دهد.- اگر
isToggledtrueباشد، قلب پر شده را بارگذاری می کند. - اگر
isToggledfalseباشد، قلب ترسیم شده را بارگیری می کند.
- اگر
-
contentDescriptionIconهمچنین بر اساس وضعیتisToggledبهروزرسانی میشود تا اطلاعات دسترسی مناسب را ارائه دهد.
نتیجه
تصویر زیر دکمه نماد تغییر را از قطعه قبلی در حالت انتخاب نشده نشان می دهد:

مثال پیشرفته: اقدامات تکراری در مطبوعات
این بخش نحوه ایجاد دکمههای آیکونی را نشان میدهد که به طور مداوم یک عمل را در حالی که کاربر فشار میدهد و نگه میدارد، فعال میکند، نه اینکه فقط یک بار در هر کلیک فعال شود.
@Composable fun MomentaryIconButton( unselectedImage: Int, selectedImage: Int, contentDescription: String, modifier: Modifier = Modifier, stepDelay: Long = 100L, // Minimum value is 1L milliseconds. onClick: () -> Unit ) { val interactionSource = remember { MutableInteractionSource() } val isPressed by interactionSource.collectIsPressedAsState() val pressedListener by rememberUpdatedState(onClick) LaunchedEffect(isPressed) { while (isPressed) { delay(stepDelay.coerceIn(1L, Long.MAX_VALUE)) pressedListener() } } IconButton( modifier = modifier, onClick = onClick, interactionSource = interactionSource ) { Icon( painter = if (isPressed) painterResource(id = selectedImage) else painterResource(id = unselectedImage), contentDescription = contentDescription, ) } }
نکات کلیدی در مورد کد
-
MomentaryIconButtonیکunselectedImage: Int، شناسه منبع قابل ترسیم برای نماد زمانی که دکمه فشار داده نشده است، وselectedImage: Int، شناسه منبع قابل ترسیم برای نماد هنگام فشار دادن دکمه. - از یک
interactionSourceبرای ردیابی خاص تعاملات "پرس" از کاربر استفاده می کند. - هنگامی که دکمه به طور فعال فشار داده می شود
isPressedدرست است و در غیر این صورت false است. وقتیisPressedtrueباشد،LaunchedEffectوارد یک حلقه می شود.- در داخل این حلقه، از یک
delay(باstepDelay) برای ایجاد مکث بین اقدامات راهاندازی استفاده میکند.coerceInتضمین می کند که تاخیر حداقل 1 میلی ثانیه است تا از حلقه های بی نهایت جلوگیری شود. -
pressedListenerپس از هر تأخیر در حلقه فراخوانی می شود. این باعث تکرار عمل می شود.
- در داخل این حلقه، از یک
-
pressedListenerازrememberUpdatedStateاستفاده می کند تا اطمینان حاصل کند کهonClicklambda (عملی که باید انجام شود) همیشه به روزترین از آخرین ترکیب بندی است. -
Iconتصویر نمایش داده شده خود را بر اساس اینکه آیا دکمه در حال حاضر فشار داده شده است یا خیر، تغییر می دهد.- اگر
isPressedدرست باشد، تصویرselectedImageنشان داده می شود. - در غیر این صورت، تصویر
unselectedImageنشان داده می شود.
- اگر
بعد، از این MomentaryIconButton در یک مثال استفاده کنید. قطعه زیر دو دکمه نماد را نشان می دهد که یک شمارنده را کنترل می کنند:
@Preview() @Composable fun MomentaryIconButtonExample() { var pressedCount by remember { mutableIntStateOf(0) } Row( modifier = Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically ) { MomentaryIconButton( unselectedImage = R.drawable.fast_rewind, selectedImage = R.drawable.fast_rewind_filled, stepDelay = 100L, onClick = { pressedCount -= 1 }, contentDescription = "Decrease count button" ) Spacer(modifier = Modifier) Text("advanced by $pressedCount frames") Spacer(modifier = Modifier) MomentaryIconButton( unselectedImage = R.drawable.fast_forward, selectedImage = R.drawable.fast_forward_filled, contentDescription = "Increase count button", stepDelay = 100L, onClick = { pressedCount += 1 } ) } }
نکات کلیدی در مورد کد
- ترکیبپذیر
MomentaryIconButtonExampleیکRowحاوی دو نمونهMomentaryIconButtonو یکTextقابل نوشتن برای ایجاد یک رابط کاربری برای افزایش و کاهش شمارنده نمایش میدهد. - یک متغیر حالت قابل تغییر
pressedCountبا استفاده ازrememberوmutableIntStateOfنگه می دارد که به 0 مقداردهی اولیه شده است. هنگامی کهpressedCountتغییر می کند، هر composable که آن را مشاهده می کند (مانندTextcomposable) دوباره ترکیب می شود تا مقدار جدید را منعکس کند. - اولین
MomentaryIconButtonبا کلیک یا نگه داشتن،pressedCountکاهش می دهد. - دومین
MomentaryIconButtonبا کلیک یا نگه داشتن،pressedCountافزایش می دهد. - هر دو دکمه از یک
stepDelay100 میلی ثانیه استفاده می کنند، به این معنی که عملonClickهر 100 میلی ثانیه تکرار می شود در حالی که یک دکمه نگه داشته می شود.
نتیجه
ویدئوی زیر رابط کاربری را با دکمههای آیکون و شمارنده نشان میدهد: