Kotlin开发Android App和Java的差异5----Kotlin中使用TabLayout + ViewPager2

个人淘宝店铺链接 需要的伙伴可以点击这里

1 布局

<com.google.android.material.tabs.TabLayout
    android:id="@+id/tablayout"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:tabIndicatorHeight="2dp"
    app:tabIndicatorColor="@android:color/holo_red_dark"
    app:tabMode="scrollable"
    //Android平板需要加上这个选项,不然只会居中展示
    app:tabGravity="fill"/>

<androidx.viewpager2.widget.ViewPager2
    android:id="@+id/vp_news"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/tablayout"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    android:orientation="horizontal"/>

2 TabLayout和ViewPager2的联动

adapter = ViewPageAdapter(this,fragments)
//ViewPager2设置适配器
vp_news.adapter = adapter
//ViewPager2设置滑动监听
vp_news.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {

    override fun onPageScrolled(
        position: Int,
        positionOffset: Float,
        positionOffsetPixels: Int
    ) {
        super.onPageScrolled(position, positionOffset, positionOffsetPixels)

//                Log.e("TAG","滑动位置  $position")
    }

    override fun onPageScrollStateChanged(state: Int) {
        super.onPageScrollStateChanged(state)
    }

    override fun onPageSelected(index: Int) {
        super.onPageSelected(index)
        Log.e("TAG","onPageSelected  $index")

        //拿到全部的Tab
        var tabCount = tablayout.tabCount

        for(i in 0 until tabCount){

            var tab = tablayout.getTabAt(i)

            tab?.apply {
                if(position == index){

                    var textView = customView as TextView
                    textView.textSize = 30f
                }else{

                    var textView = customView as TextView
                    textView.textSize = 20f
                }

            }

        }

    }
})


//TabLayout和ViewPager2的联动
mediator = TabLayoutMediator(tablayout,vp_news) { tab, position ->
    tab.apply {
        //做View的初始化
        var tabView = TextView(this@NewsActivity)
        tabView.text = tabs[position]

        customView = tabView

    }

}
//调用attach才可以联动
mediator.attach()

ViewPager2的适配器代码,ViewPager2如果内部填充的是Fragment,那么就使用FragmentPageAdapter,如果是View,那么就使用RecyclerView.Adapter

class ViewPageAdapter(activity: FragmentActivity,fragements:List<Fragment>) : FragmentStateAdapter(activity) {

    private var fragements:List<Fragment> = fragements


    override fun getItemCount(): Int {
        return fragements.size
    }

    override fun createFragment(position: Int): Fragment {

        return fragements.get(position)
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Awesome_lay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值