在 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), ) } } } }
程式碼重點
- 將文字的
LocalTextStyle設為Animated。textMotion這樣可確保版面配置動畫或縮放轉場效果期間的文字算繪作業順暢,避免出現象素對齊瑕疵。 - 提供垂直堆疊高度的特定大小
364.dp。請務必提供特定高度、使用高度修飾符,或套用fillMaxSize修飾符,定義卡片轉場效果的視覺區域。 - 與直接採用形狀參數的其他元件不同,
VerticalStack會使用itemDecoration修飾符管理項目的視覺邊界。這個範例會為初始項目的itemDecoration傳遞與所有子項相同的形狀,以維持一致的剪輯和視覺效果。本範例使用預設的CardDefaults.shape。