코틀린 - TabLayout
2019. 7. 10. 14:00
스터디 중 기록.
build.gradle
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
implementation 'com.android.support:design:28.0.0'
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.circularreveal.CircularRevealRelativeLayout
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">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="fixed"/>
<android.support.design.widget.TabLayout
android:id="@+id/tabs_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"/>
</android.support.design.circularreveal.CircularRevealRelativeLayout>
탭 내부 fragment xml x 3
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="First tab"
android:textSize="40sp"/>
</FrameLayout>
탭 내부 fragment Kotlin x 3
class FirstFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
// Inflate the layout for this fragment
return inflater!!.inflate(R.layout.fragment_first, container, false)
}
PagerAdapter Kotlin
class MyPagerAdapter(fm: FragmentManager) : FragmentPagerAdapter(fm){
class FragmentInfo(val iconOnResId: Int, val iconOffResId: Int, val titleText: String, val fragment: Fragment)
private val mFragmentInfoList = ArrayList<FragmentInfo>()
fun addFragment(iconOnResID:Int, iconOffResID:Int, title: String, fragment:Fragment){
val info = FragmentInfo(iconOnResID, iconOffResID, title,fragment)
mFragmentInfoList.add(info)
}
override fun getItem(position: Int): Fragment {
return mFragmentInfoList[position].fragment
}
override fun getCount(): Int {
return mFragmentInfoList.size
// return 3
}
override fun getPageTitle(position: Int): CharSequence {
return mFragmentInfoList[position].titleText
}
}
MainActivity Kotlin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val fragmentAdapter = MyPagerAdapter(supportFragmentManager)
fragmentAdapter.addFragment(R.drawable.home2,R.drawable.home,"Page11",FirstFragment())
fragmentAdapter.addFragment(R.drawable.mypage2,R.drawable.mypage,"Page2",SecondFragment())
fragmentAdapter.addFragment(R.drawable.soon2,R.drawable.soon,"Page3",ThirdFragment())
viewpager_main.adapter = fragmentAdapter
viewpager_main.addOnPageChangeListener(
TabLayout.TabLayoutOnPageChangeListener(tabs_main))
tabs_main.addOnTabSelectedListener(object:TabLayout.OnTabSelectedListener{
override fun onTabSelected(tab: TabLayout.Tab) {
var i = tab.position
viewpager_main.currentItem = i
tabIconSelect()
}
override fun onTabUnselected(tab: TabLayout.Tab) {
}
override fun onTabReselected(tab: TabLayout.Tab) {
}
})
tabs_main.setupWithViewPager(viewpager_main)
tabIconSelect()
}
fun tabIconSelect() {
val tabBtnImgOff = intArrayOf(R.drawable.home, R.drawable.soon, R.drawable.mypage)
val tabBtnImgOn = intArrayOf(R.drawable.home2, R.drawable.soon2, R.drawable.mypage2)
for (i in 0..2) {
val tab = tabs_main.getTabAt(i)!!
if(tab.isSelected){
tab.setIcon(tabBtnImgOn[i])
// TabBtnText.get(i).setTextColor(resources.getColor(R.color.point))
} else {
tab.setIcon(tabBtnImgOff[i])
// TabBtnText.get(i).setTextColor(resources.getColor(R.color.lightGray))
}
}
}
}
참고 링크
'COMPUTER > Kotlin' 카테고리의 다른 글
코틀린 - 로딩화면 만들기 (0) | 2019.07.11 |
---|