在以前使用 XML 的 Android 中要使用水平或垂直滑動的頁面會使用 ViewPager2,現在新的 Android Jetpack Compose 則是使用 Pager 。水平左右滑動是 HorizontalPager ,垂直上下滑動是 VerticalPager ,雖然目前還在開發中,是實驗性功能,但是已經從 Accompanist 提升(upstream)到 AndroidX ,穩定性可以說是非常高了,不過使用方式還是有可能會變更。
參考資料:
Accompanist - Pager layouts
GitHub - google/accompanist
android developers - Pager in Compose
Jetpack Compose Accompanist — An FAQ.
android developers - Create swipe views with tabs using ViewPager
android developers - Migrate from ViewPager to ViewPager2
加入依賴
需要在 build.gradle.kts(Module :app) 中加入 androidx.compose.foundation 依賴:
dependencies {
implementation("androidx.compose.foundation:foundation:1.5.3")
}
基本使用示範
建立三個水平左右可以滑動的頁面,中間顯示頁次(從 0 開始)
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@OptIn(ExperimentalFoundationApi::class) // 啟用實驗性功能
@Composable
fun myPager() {
val pagerState = rememberPagerState(pageCount = {
3
})
HorizontalPager(state = pagerState) { page ->
Box(Modifier.fillMaxSize()) {
Text(
text = "Page: $page",
modifier = Modifier.align(Alignment.Center)
)
}
}
}
切換到指定頁面示範
建立一個 Icon ,點擊後會跳轉到第三頁
import androidx.compose.runtime.rememberCoroutineScope
import kotlinx.coroutines.launch
val scope = rememberCoroutineScope()
Icon(Icons.Outlined.Search, contentDescription = "搜尋", Modifier.clickable {
scope.launch {
// 切換到第三頁
pagerState.animateScrollToPage(2)
}
})
參考資料:
Accompanist - Pager layouts
GitHub - google/accompanist
android developers - Pager in Compose
Jetpack Compose Accompanist — An FAQ.
android developers - Create swipe views with tabs using ViewPager
android developers - Migrate from ViewPager to ViewPager2
留言
張貼留言
如果有任何問題、建議、想說的話或文章題目推薦,都歡迎留言或來信: a@ruyut.com