في Jetpack Compose Glimmer، VerticalStack هو تصميم قابل للتمرير عموديًا ويتم تحميله عند الحاجة، ويرتّب العناصر في تسلسل ثلاثي الأبعاد يتداخل بصريًا. يتم عرض العنصر الأساسي بشكل بارز في المقدمة، بينما يتم وضع العناصر اللاحقة خلفه.
سلوكيات التمرير وتحديد الموضع
بما أنّ الحِزم تحافظ على ترتيب العناصر في تصميم مضغوط ومتداخل، فإنّها تتضمّن بعض السلوكيات المختلفة عن الأنواع الأخرى من المكوّنات المتسلسلة، مثل القوائم:
- عندما يتنقّل المستخدم عموديًا، ينتقل العنصر النشط في المقدّمة خارج نطاق العرض، ما يسمح للعنصر الذي يقع أسفله مباشرةً بالانزلاق إلى موضع المقدّمة البارز.
- يتم دائمًا تحريك العناصر بشكل سريع باستخدام حركة نابضية متخصّصة إلى موضع المقدّمة بعد انتهاء إيماءة المستخدم.
- يتم وضع العناصر على طول المحور z، مع وضع العناصر الأبعد في القائمة خلف العنصر الأساسي.
إدارة التركيز
يستخدم VerticalStack نظام تركيز متخصصًا لضمان أنّ العنصر الحالي في المقدّمة هو دائمًا الهدف الأساسي لتفاعل المستخدم:
- التركيز الأوّلي وإعادة التركيز: ينتقل التركيز الأوّلي وإعادة التركيز إلى العنصر الحالي في أعلى الحزمة.
- إشعار التركيز التلقائي: عند انتقال العناصر، يطلب الحزمة التركيز على العنصر العلوي.
- تتبُّع التركيز: يستخدم كل عنصر
onFocusChangedلإعلامStackStateبحالة التركيز الفردية.
مثال: إنشاء حزمة عمودية
تنشئ التعليمة البرمجية التالية حزمة عمودية تحتوي على عدة عناصر:
@Composable fun VerticalStackSample() { VerticalStack(modifier = Modifier.fillMaxWidth().height(364.dp)) { item(key = 0) { Card(modifier = Modifier.fillMaxSize().itemDecoration(CardDefaults.shape)) { Text( "Item-0", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), ) } } items(count = 10, key = { it + 1 }) { index -> Card(modifier = Modifier.fillMaxSize().itemDecoration(CardDefaults.shape)) { Text( "Item-${index + 1}", style = LocalTextStyle.current.copy(textMotion = TextMotion.Animated), ) } } } }
النقاط الرئيسية حول الرمز
- تضبط هذه السمة
textMotionLocalTextStyleللنص علىAnimated. يساعد ذلك في عرض النص بسلاسة أثناء الرسوم المتحركة الخاصة بالتصميم أو عمليات الانتقال المتعلقة بتغيير الحجم، ما يمنع ظهور تشوّهات ناتجة عن محاذاة البكسل. - توفّر هذه السمة حجمًا محدّدًا لـ
364.dpمن أجل ارتفاع الحزمة العمودية. يجب دائمًا توفير ارتفاع محدّد أو استخدام أداة تعديل الارتفاع أو تطبيق أداة التعديلfillMaxSizeلتحديد المساحة المرئية للانتقالات بين البطاقات. - على عكس المكوّنات الأخرى التي تأخذ مَعلمة الشكل مباشرةً، تدير
VerticalStackالحدود المرئية لعناصرها باستخدام المعدِّلitemDecoration. يستخدم هذا المثال الشكل نفسه لكل منitemDecorationالخاص بالعنصر الأوّلي وجميع العناصر الفرعية للحفاظ على اتساق عمليات القص والتأثيرات المرئية. يستخدم هذا المثالCardDefaults.shapeالتلقائي.