Android

[Android] TabLayout - Viewpager 연계 라이브러리

은 딩 2023. 1. 2. 10:57

https://dkan9634.tistory.com/93

 

[Android] ViewPager

Viewpager란? : 여러개의 화면(Fragment)을 책 페이지처럼 한 장씩 보도록 지원하는 기능. => (가로) 스크롤뷰 + 스크롤 위치를 강제시키는 기능이 추가된 개념. => 인스타그램 피드 느낌 사용법 1. 액티

dkan9634.tistory.com

위 코드 이어서 작업

 


TabLayout이란?

  • 플레이스토어처럼, 지금 사용자가 어느 Fragment를 보고있는지 알려주고 싶을 때 사용
  • 원하는 탭을 누르면 해당 페이지로 이동 기능.
  • 안드로이드의 기본 기능 아님. => 라이브러리 설치 작업 필요.(웬만하면 깔려 있음)

 


사용법

1. xml에서 탭레이아웃 배치 + 아이디 부여
=> <com.google.~.TabLayout> 배치
=> 라이브러리 설치가 안되었다면 자동완성되지 않는다.
=> app: 으로 시작하는 속성들 (ex. tabMode, tabIndicatorColor 등) 을 편집해서 원하는 모양으로 커스터마이징 가능.
(다음 글에서  다뤄보겠다.)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <com.google.android.material.tabs.TabLayout
        android:id="@+id/myTablayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/mainViewPager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

=> activity_main.xml에 TabLayout 부분 추가

 

2. 코틀린에서 ViewPager와 연결
=> 탭레이아웃변수.setupWithViewPager(뷰페이저변수)

// 탭레이아웃을 => 뷰페이저와 연결
myTablayout.setupWithViewPager(mainViewPager)

전체 MainActivity.kt 코드

package com.eunjeong.viewpager

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.eunjeong.viewpager.adapters.MainViewPagerAdapter
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    lateinit var mViewPagerAdapter : MainViewPagerAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        mViewPagerAdapter = MainViewPagerAdapter(supportFragmentManager)
        mainViewPager.adapter = mViewPagerAdapter

        // 페이지가 많아지면 간단하게 부드럽도록 지원하는 기능
        mainViewPager.offscreenPageLimit = 3

        // 탭레이아웃을 => 뷰페이저와 연결
        myTablayout.setupWithViewPager(mainViewPager)

    }
}

3. 페이지별 제목 => ViewPagerAdapter 클래스 내부 수정
=> getPageTitle 함수를 오버라이딩 => 포지션별 제목 리턴

=> Adapter에서 작업

//페이지별 제목 설정
override fun getPageTitle(position: Int): CharSequence? {
    return when(position){
            0 -> "첫번째"
            1->"두번째"
            else -> "세번째"
        }
}

전체 Adapter Code

package com.eunjeong.viewpager.adapters

import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.FragmentPagerAdapter
import com.eunjeong.viewpager.fragments.FirstFragment
import com.eunjeong.viewpager.fragments.SecondFragment
import com.eunjeong.viewpager.fragments.ThirdFragment

class MainViewPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm) {
    //페이지별 제목 설정
    override fun getPageTitle(position: Int): CharSequence? {
//        if (position == 0){
//            return "첫번째"
//        }
//        else if (position == 1){
//            return "두번쨰"
//        }
//        else{
//            return "세번째"
//        }
        return when(position){
            0 -> "첫번째"
            1->"두번째"
            else "세번째"
        }
    }

    override fun getCount(): Int {
        return 3 // 몇장짜리인지
    }

    override fun getItem(position: Int): Fragment {
//        if (position == 0){
//            return FirstFragment()
//        }
//        else if (position == 1){
//            return SecondFragment()
//        }
//        else{
//            return ThirdFragment()
//        }
        return when(position){
            0 -> FirstFragment()
            1 -> SecondFragment()
            else -> ThirdFragment()
        }
    }

}

https://github.com/Eundding/android_study/tree/master/ViewPager

 

GitHub - Eundding/android_study

Contribute to Eundding/android_study development by creating an account on GitHub.

github.com


참고 : class101+ 코딩티처 지니 강의