목차
반응형
1. 레이아웃 구성하기
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/TabTheme">
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.design.widget.CoordinatorLayout>
AppBar영역 안에 TabLayout을 넣어주고, 아래에 ViewPager 넣어준 activity_main.xml이다.
아래는 해당 AppBar의 스타일에 해당하는 부분이다.
<style name="TabTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item> <!-- 배경 -->
<item name="android:textColorPrimary">@android:color/white</item> <!-- 탭바 선택된 텍스트 -->
<item name="android:textColorSecondary">@android:color/black</item> <!-- 탭바 텍스트 -->
<item name="colorAccent">@android:color/white</item> <!-- 하단 움직이는 바 색-->
</style>
2. ViewPager에 대한 Adapter 생성하기
class MainAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) {
override fun getItem(position: Int): Fragment? {
return when(position) {
0 -> AFragment()
1 -> BFragment()
2 -> CFragment()
3 -> DFragment()
else -> null
}
}
// 생성 할 Fragment 의 개수
override fun getCount() = 4
override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
super.destroyItem(container, position, `object`)
}
override fun getPageTitle(position: Int): CharSequence? {
return null
}
}
Fragment를 이용하여 PagerAdapter를 적용할 것이라 FragmentStatePagerAdapter를 받고
3. Fragment 생성하기
Fragment는 총 4개를 생성해줄 건데 레이아웃 파일은 fragment_main.xml로 하나만 만든다.
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_fragment"
android:textSize="20dp"
android:textStyle="bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="parent"/>
</android.support.constraint.ConstraintLayout>
아래는 클래스. A Fragment 부분을 B Fragment, C Fragment, D Fragment 이런식으로 4개의 클래스를 만들어준다.
class AFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_main, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
//뷰 설정
tv_fragment.text = "A Fragment"
}
}
4. MainActivity에서 적용하기
class MainActivity : AppCompatActivity() {
private val adapter by lazy { MainAdapter(supportFragmentManager) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 뷰페이저 어댑터 연결
view_pager.adapter = MainActivity@adapter
view_pager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener{
override fun onPageScrollStateChanged(state: Int) {
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(position: Int) {
tab_layout.getTabAt(0)?.setIcon(R.drawable.ic_music)
tab_layout.getTabAt(1)?.setIcon(R.drawable.ic_chat)
tab_layout.getTabAt(2)?.setIcon(R.drawable.ic_image)
tab_layout.getTabAt(3)?.setIcon(R.drawable.ic_person)
when(position) {
0 -> tab_layout.getTabAt(0)?.setIcon(R.drawable.ic_music_white)
1 -> tab_layout.getTabAt(1)?.setIcon(R.drawable.ic_chat_white)
2 -> tab_layout.getTabAt(2)?.setIcon(R.drawable.ic_image_white)
3 -> tab_layout.getTabAt(3)?.setIcon(R.drawable.ic_person_white)
}
}
})
// 탭 레이아웃에 뷰페이저 연결
tab_layout.setupWithViewPager(view_pager)
// 탭 레이아웃 초기화
tab_layout.getTabAt(0)?.setIcon(R.drawable.ic_music)
tab_layout.getTabAt(1)?.setIcon(R.drawable.ic_chat)
tab_layout.getTabAt(2)?.setIcon(R.drawable.ic_image)
tab_layout.getTabAt(3)?.setIcon(R.drawable.ic_person)
}
}
설정했던 것들 적용하면 끝난다.
만들어진 클래스와 drawable, layout파일들이다.
아래는 구현된 화면!
반응형
'Develop > Android' 카테고리의 다른 글
MPAndroidChart 라이브러리를 활용한 BarChart 그리기 (19) | 2020.04.26 |
---|---|
코틀린 코루틴이란? (Kotlin coroutine) (0) | 2020.04.14 |
android Room 사용하기 (0) | 2020.04.06 |
세로 방향 뷰페이저 적용하기 - Vertical ViewPager (Kotlin) (0) | 2019.12.22 |
안드로이드 스튜디오 XML 파일들 에러 발생 시 (0) | 2019.12.19 |