본문 바로가기
안드로이드/AdapterView

안드로이드 TabLayout

by 김어찐 2022. 6. 20.
728x90

Appbar Layout에 TabBarLayout과 ViewPager를 통해 탭을 구성할 수 있다.

 

TabLayoutMediator 기능 사용할려면 com.google.android.material 설치

package com.example.tablayout

import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
import androidx.viewpager2.adapter.FragmentStateAdapter
import com.google.android.material.tabs.TabLayoutMediator
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : FragmentActivity() {
    // ViewPager2에 셋팅하기 위한 Fragment들을 가지고 잇는 arrayList
    val fragmentList = ArrayList<Fragment>()



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

        setActionBar(toolbar)

        toolbar.setTitleTextColor(Color.WHITE)
        // 탭 미선택시 white, 선택시 red
        tabs.setTabTextColors(Color.GREEN,Color.RED)

        for (i in 0..9) {
            val sub = SubFragment("$i 번째 프래그먼트")
            fragmentList.add(sub)
        }
        val adapter1 = object : FragmentStateAdapter(this) {
            override fun getItemCount(): Int {
                return fragmentList.size
            }

            override fun createFragment(position: Int): Fragment {
                return fragmentList[position]
            }
        }
        pager2.adapter = adapter1

        // tab과 viewPager를 연결한다
        TabLayoutMediator(tabs, pager2){tab,position ->
            tab.text = "탭 $position"
        }.attach()
    }
}

 

activity_main.xml

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/appbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent">

        <Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"></Toolbar>

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

            app:tabMode="scrollable"/>
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.core.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"

        android:fillViewport="true"
        app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior">

        <androidx.viewpager2.widget.ViewPager2
            android:id="@+id/pager2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </androidx.core.widget.NestedScrollView>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

 

 

 

 SubFragment

package com.example.tablayout

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import kotlinx.android.synthetic.main.fragment_sub.*

class SubFragment : Fragment {
    lateinit var title:String

    constructor(title:String){
        this.title = title
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val view = inflater.inflate(R.layout.fragment_sub,null)
        return view
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        textView.text = title
    }
}

 

 

728x90

'안드로이드 > AdapterView' 카테고리의 다른 글

안드로이드 recycler AdapterView data binding 적용  (0) 2022.11.26
아느로이드 DrawerLayout  (0) 2022.06.20
안드로이드 AppBar Layout  (0) 2022.06.20
안드로이드 ViewPager2  (0) 2022.06.20
안드로이드 RecyclerView  (0) 2022.06.07