در 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), ) } } } }
نکات کلیدی در مورد کد
-
textMotionبرایLocalTextStyleمتن رویAnimatedتنظیم میکند. این کار باعث میشود متن در طول انیمیشنهای طرحبندی یا انتقال مقیاسبندی، روانتر رندر شود تا از ایجاد آثار مصنوعی ناشی از شکستن پیکسلها جلوگیری شود. - اندازه مشخصی برابر با
364.dpبرای ارتفاع پشته عمودی ارائه میدهد. همیشه یک ارتفاع مشخص ارائه دهید، از یک اصلاحکننده ارتفاع استفاده کنید یا اصلاحکنندهfillMaxSizeرا برای تعریف ناحیه بصری برای انتقال کارتها اعمال کنید. - برخلاف سایر کامپوننتهایی که مستقیماً پارامتر شکل (shape) میگیرند،
VerticalStackمرزهای بصری آیتمهای خود را با استفاده از اصلاحکنندهitemDecorationمدیریت میکند. این مثال برایitemDecorationآیتم اولیه، همان شکلی را که به همه آیتمهای فرزند میدهد، ارسال میکند تا برش و جلوههای بصری ثابتی حفظ شود. این مثال ازCardDefaults.shapeپیشفرض استفاده میکند.