https://developer.android.com/guide/navigation/navigation-swipe-view-2?hl=ko
ViewPager2를 사용하여 탭으로 스와이프 뷰 만들기 | Android 개발자 | Android Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. ViewPager2를 사용하여 탭으로 스와이프 뷰 만들기 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 스와
developer.android.com
한장씩 넘겨가면서 볼수 있는 뷰.
recylcerView 구조로 구현됨. —> item_frame.xml , adapter 구현
- 추가하고 싶은 곳 레이아웃에 androidx.viewpager2.widget.ViewPager2 요소 추가
- 아이템 담을 레이아웃 xml 생성
- adapter 구현
class FrameAdapter(private val list : List<FrameItem>) : RecyclerView.Adapter<FrameViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FrameViewHolder {
val inflater = parent.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
val binding = ItemFrameBinding.inflate(inflater, parent, false)
return FrameViewHolder(binding)
}
override fun getItemCount(): Int {
return list.size
}
override fun onBindViewHolder(holder: FrameViewHolder, position: Int) {
holder.bind(list[position])
}
}
data class FrameItem(
val uri : Uri
)
class FrameViewHolder(private val binding:ItemFrameBinding) : RecyclerView.ViewHolder(binding.root){
fun bind(item : FrameItem){
binding.frameImageView.setImageURI(item.uri)
}
}
activity 에서 adapter 연결 및, 받은 데이터 연결
// ex) 이미지를 뷰페이저로 구현 (갤러리처럼 한장한장씩 보게.)
val images = (intent.getStringArrayExtra("images") ?: emptyArray())
.map{uriString -> FrameItem(Uri.parse(uriString))}
val frameAdapter = FrameAdapter(images)
binding.viewPager.adapter = frameAdapter
뷰페이져는 보통 탭과 함께 많이 사용됨.
- 탭 레이아웃 추가 com.google.android.material.tabs.TabLayout
- 액티비티에서 탭레이아웃과 뷰페이져 연결 (TabLayoutMediator)
TabLayoutMediator(
binding.tabLayout,
binding.viewPager,
){ tab, position ->
binding.viewPager.currentItem = tab.position
}.attach()
// tab 의 텍스트도 수정 가능
TabLayoutMediator(binding.tabLayout,binding.viewPager) { tab, position ->
run {
val textView = TextView(this@MainActivity)
textView.text = "position $position"
textView.gravity = Gravity.CENTER
// tab.text = "position $position"
tab.customView = textView
}
}.attach()
3. 연결은 됐는데 비주얼적으로 확실하게 보이지 않음. --> 아래 점으로 표시해주기
ic_dot_unselected.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="ring"
android:thickness="3dp"
android:innerRadius="0dp"
android:useLevel="false"
>
<solid android:color="@color/gray"/>
</shape>
black 일때 선택. gray 비선택. (2개파일)
innerRadius 를 넣어줘야 조그맣게 나옴
selector_tab.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_dot_selected" android:state_selected="true"/>
<item android:drawable="@drawable/ic_dot_unselected" android:state_selected="false"/>
</selector>
- 탭레이아웃에 tabIndicator=@null 로 설정 (아래 디폴트 라인으로 나오던 것)
- 탭레이아웃에 app:tabBackground="@drawable/selector_tab” 추가
이 예시는 RecyclerViewAdapter 를 사용한 예시임.
FragmentStateAdapter 사용한 Adapter
class ViewPagerAdapter(private val mainActivity: MainActivity) : FragmentStateAdapter(mainActivity) {
// 뷰페이저 총 페이지 수.
override fun getItemCount(): Int {
return 3
}
override fun createFragment(position: Int): Fragment {
// 뷰페이저 선택시 해당 프래그먼트로.
return when(position) {
0-> {
WebViewFragment()
}
1 ->{
BFragment()
}
else -> {
WebViewFragment()
}
}
}
}
'Android > UI' 카테고리의 다른 글
Android / WebView (0) | 2024.03.12 |
---|---|
Android / AppBar (0) | 2024.03.12 |
Android / ConstraintLayout (1) | 2024.03.12 |
Android/ LinearLayout (1) | 2024.03.12 |
Android / Kotlin AlertDialog custom Layout List 다이얼로그 커스텀 레이아웃 (0) | 2023.09.25 |