안녕하세요. Narvis2 입니다.
이번 포스팅에서는 Android Jetpack Compose 에서 Tab + ViewPager
를 사용하는 방법에 대하여 예제를 통해 알아보고자 합니다.
🍎 Tab + ViewPager
- 기존 TabLayout + ViewPager2 를
Compose
에서 사용하기
🍀 1. Dependency 추가 (build.gradle)
1
2
implementation "com.google.accompanist:accompanist-pager:0.20.1"
implementation "com.google.accompanist:accompanist-pager-indicators:0.20.1"
🍀 2. rememberPagerState
rememberPagerState
👉TabRow
와Pager
객체에서 공유할 데이터- 현재 몇 페이지에 있는지 저장
rememberCoroutineScrope
👉Composable
에서 페이지를 이동하는 동작은CoroutineScope
에서 수행되어야 함TabRow
👉 기존TabLayout
과 같음selectedTabIndex
👉 현재 선택된 페이지 Indexindicator
👉indicator
설정
HorizontalPager
👉 기존ViewPager2
와 같음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
@Composable
fun TabViewPagerScreen(
pages: List<String> = listOf("페이지1", "페이지2", "페이지3")
) {
val pagerState = rememberPagerState()
val coroutineScope = rememberCoroutineScope()
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background,
) {
Column(
modifier = Modifier.fillMaxSize(),
verticalArrangement = Arrangement.Center,
) {
TabRow(
selectedTabIndex = pagerState.currentPage,
indicator = { tabPositions: List<TabPosition> ->
TabRowDefaults.Indicator(
Modifier.pagerTabIndicatoroffset(pagerState, tabPositions)
)
}
) {
// pages 개수 만큼 Tab 만들기
pages.forEachIndexed { index, title ->
Tab(
text = { Text(text = title) },
selected = pagerState.currentPosition == index,
onClick = {
// Tab 클릭 시 해당 페이지로 스크롤링
coroutineScope.launch {
pagerState.scrollToPage(index)
}
}
)
}
}
}
// ViewPager2
HorizontalPager(count = pagers.size, state = pagerState) { page ->
Text(
modifier = Modifier.wrapContentSize(),
text = page.toString(),
textAlign = TextAlign.Center,
fontSize = 30.sp
)
}
}
}