개발/AOS

뷰페이거(ViewPager)에 인디케이터(Indicator) 추가 하기

728x90

외부 라이브러리 없이 ViewPager의 인디케이터 추가하기

 

 

1.TabLayout을 ViewPager가 있는 xml에 추가한다.

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

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

2.  ViewPager와 Tablayout을 연결한다.

 

 

val viewPager = findViewById<ViewPager>(R.id.viewPager)
val tabLayout = findViewById<TabLayout>(R.id.tabLayout)
viewPager.adapter = adapter

tabLayout.setupWithViewPager(viewPager)

(ViewPager2의 경우 TabLayoutMediator를 이용한다.)

val viewPager2 = findViewById<ViewPager2>(R.id.viewPager2)
val tabLayout = findViewById<TabLayout>(R.id.tabLayout)
viewPager2.adapter = adapter

TabLayoutMediator(tabLayout, viewPager2) { tab, position ->
    //Some implementation
  }.attach()

 

 

3. drawable폴더 안에 선택된 점, 선택되지 않은 점, tab selector을 정의한다.

 

 

selected_dot.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape
            android:innerRadius="0dp"
            android:shape="ring"
            android:thickness="8dp"
            android:useLevel="false">
            <solid android:color="@color/colorAccent"/>
        </shape>    
    </item>
</layer-list>

 

 

 

default_dot.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape
            android:innerRadius="0dp"
            android:shape="ring"
            android:thickness="8dp"
            android:useLevel="false">
            <solid android:color="@android:color/darker_gray"/>
        </shape>    
    </item>
</layer-list>

tab_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/selected_dot"
          android:state_selected="true"/>

    <item android:drawable="@drawable/default_dot"/>
</selector>

 

3. TabLayout에 아래의 속성을 추가한다.

 

    <com.google.android.material.tabs.TabLayout
        android:layout_width="wrap_content"
        android:layout_height="8dp"
        android:layout_marginTop="16dp"
        app:tabBackground="@drawable/pager_indicator_tab_selector"
        app:tabGravity="center"
        app:tabIndicatorHeight="0dp" />

끝! 👏👏👏