تعرِض أزرار الرموز الإجراءات التي يمكن للمستخدمين اتّخاذها. يجب أن تستخدم أزرار الرموز رمزًا له معنى واضح، وعادةً ما تمثّل إجراءات شائعة أو يتم استخدامها بشكل متكرّر.
هناك نوعان من أزرار الرموز:
- تلقائي: يمكن أن تفتح هذه الأزرار عناصر أخرى، مثل قائمة أو بحث.
- التبديل: يمكن أن تمثّل هذه الأزرار إجراءات ثنائية يمكن تفعيلها أو إيقافها، مثل "مفضّل" أو "إشارة مرجعية".
واجهة برمجة التطبيقات
استخدِم العنصر القابل للتجميع IconButton لتنفيذ أزرار الرموز العادية. ل
إنشاء أنماط مرئية مختلفة، مثل الأشكال الملونة أو الملونة المموّهة أو المخطّطة، استخدِم
FilledIconButton وFilledTonalIconButton و
OutlinedIconButton على التوالي.
تشمل المَعلمات الرئيسية لـ IconButton ما يلي:
onClick: دالة LAMBDA يتم تنفيذها عندما ينقر المستخدم على زر الرمز.-
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." ) } }
النقاط الرئيسية حول الرمز
- يحدِّد العنصر القابل للإنشاء
ToggleIconButtonExampleIconButtonقابلاً للتبديل.- ينشئ
mutableStateOf(false)عنصرMutableStateيحتوي على قيمة boolean، وهيfalseفي البداية. وهذا يجعلisToggledعنصرًا يحتفظ بالحالة، ما يعني أنّ Compose يعيد إنشاء واجهة المستخدم كلما تغيّرت قيمته. - يضمن
rememberSaveableاستمرار حالةisToggledعلى الرغم من تغييرات الضبط، مثل تدوير الشاشة.
- ينشئ
- تحدّد دالة
onClickلعنصرIconButtonسلوك الزر عند النقر عليه، ما يؤدي إلى تبديل الحالة بينtrueوfalse. - تحمِّل مَعلمة
painterفي العنصر القابل للتجميعIconبشكل مشروطpainterResourceمختلفًا استنادًا إلى حالةisToggled. يؤدي ذلك إلى تغيير المظهر المرئي للرمز.- إذا كان
isToggledهوtrue، يتم تحميل العنصر القابل للرسم للقلب الممتلئ. - إذا كانت القيمة
isToggledهيfalse، يتم تحميل العنصر القابل للرسم الذي يمثّل قلبًا مخطّطًا.
- إذا كان
- يتم أيضًا تعديل
contentDescriptionفيIconاستنادًا إلى حالة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صحيحًا عند الضغط على الزر بشكل نشط وخطأ في الحالات الأخرى. عندما تكون قيمةisPressedهيtrue، يدخلLaunchedEffectفي حلقة.- داخل هذه الحلقة، يتم استخدام
delay(معstepDelay) لإنشاء فترات إيقاف مؤقت بين الإجراءات المشغِّلة. يضمنcoerceInأن يكون التأخير 1 ملي ثانية على الأقل لمنع تكرار الطلبات بشكل لانهائي. - يتمّ استدعاء
pressedListenerبعد كل تأخير داخل الحلقة. يؤدي ذلك إلى تكرار الإجراء.
- داخل هذه الحلقة، يتم استخدام
- يستخدم
pressedListenerrememberUpdatedStateلضمان أنّonClicklambda (الإجراء الذي سيتم تنفيذه) هو دائمًا أحدث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لإنشاء واجهة مستخدم ل زيادة مقياس وخفضه. - ويحافظ على متغيّر حالة قابل للتغيير
pressedCountباستخدامrememberوmutableIntStateOf، ويتم إعداده على القيمة 0. عند تغييرpressedCount، تتم إعادة تركيب أي عناصر تركيبية ترصده (مثل العنصر التركيبىText) لتعكس القيمة الجديدة. - يؤدي النقر على
MomentaryIconButtonالأول أو الضغط عليه مع الاستمرار إلى خفضpressedCount. - يؤدي النقر على
MomentaryIconButtonالثاني أو الإبقاء عليه إلى زيادةpressedCount. - يستخدم كلا الزرَّين
stepDelayتبلغ مدته 100 ملي ثانية، ما يعني أنّ الإجراءonClickيتكرر كل 100 ملي ثانية أثناء الضغط على أحد الزرَّين.
النتيجة
يعرض الفيديو التالي واجهة المستخدم التي تتضمّن أزرار الرموز والعداد: