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 |