دکمههای نمادین کنشهایی را که کاربران میتوانند انجام دهند نمایش میدهند. دکمههای نمادین باید از نمادی با معنای واضح استفاده کنند و معمولاً نشاندهنده کنشهای رایج یا پرکاربرد باشند.
دو نوع دکمه نماد وجود دارد:
- پیشفرض: این دکمهها میتوانند عناصر دیگری مانند منو یا جستجو را باز کنند.
- روشن/خاموش کردن: این دکمهها میتوانند نشاندهنده کنشهای دوتایی باشند که میتوانند روشن یا خاموش شوند، مانند «موردعلاقه» یا «نشانک».
سطح میانای برنامهسازی کاربردی
از عنصر ترکیبی IconButton برای پیادهسازی دکمههای نماد استاندارد استفاده کنید. برای ایجاد سبکهای دیداری مختلف مثل پرشده، پرشده با رنگ، یا خطدار، بهترتیب از
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 میانای کاربر را بازترکیب میکند. -
rememberSaveableتضمین میکند که وضعیتisToggledدر تغییرات پیکربندی، مانند چرخش صفحهنمایش، حفظ شود.
-
- لامبدای
onClickدرIconButtonرفتار دکمه را هنگام کلیک شدن تعریف میکند و وضعیت را بینtrueوfalseتغییر میدهد. - پارامتر
painterدر عنصر ترکیبیIconبهطور شرطیpainterResourceمتفاوتی را براساس وضعیتisToggledبار میکند. این کار ظاهر دیداری نماد را تغییر میدهد.- اگر
isToggledبرابر باtrueباشد، طراحی کشیدنی قلب توپر را بار میکند. - اگر
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درست است و درغیراینصورت نادرست است. وقتیisPressedtrueباشد،LaunchedEffectوارد حلقه میشود.- در این حلقه، از
delay(باstepDelay) برای ایجاد مکث بین کنشهای راهاندازی استفاده میکند. coerceInتضمین میکند که تأخیر حداقل ۱ میلیثانیه باشد تا از حلقههای نامتناهی جلوگیری شود. pressedListenerپساز هر تأخیر در حلقه فراخوانی میشود. این کار باعث میشود کنش تکرار شود.
- در این حلقه، از
pressedListenerازrememberUpdatedStateاستفاده میکند تا مطمئن شودonClickلامبدا (کنش اجرایی) همیشه جدیدترین نسخه از جدیدترین ترکیب است.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ترکیبی را برای ساختن میانای کاربری برای افزایش و کاهش شمارنده نمایش میدهد. - بااستفاده از
rememberوmutableIntStateOf، متغیر وضعیت تغییرپذیرpressedCountرا که با ۰ مقداردهی اولیه شده است حفظ میکند. وقتیpressedCountتغییر میکند، هر ترکیبپذیری که آن را مشاهده میکند (مثل ترکیبپذیریText) برای نشان دادن مقدار جدید دوباره ترکیب میشود. - اولین
MomentaryIconButtonبا کلیک کردن یا نگه داشتنpressedCountکاهش مییابد. - با کلیک کردن یا نگه داشتن
MomentaryIconButtonدوم،pressedCountافزایش مییابد. - هر دو دکمه از
stepDelay۱۰۰ میلیثانیه استفاده میکنند، یعنیonClickکنش هر ۱۰۰ میلیثانیه یکبار هنگام نگه داشتن دکمه تکرار میشود.
نتیجه
ویدیو زیر میانای کاربری را با دکمههای نماد و شمارنده نشان میدهد: