zoukankan      html  css  js  c++  java
  • 使用kotlin编写的 常用底部tab demo

    使用TabLayout+Viewpager写的一个底部导航栏  可以直接拿来塞填数据   导航栏可以根据自己的需求移动

    先上图:

    如果你的tab数量太多,超出的屏幕,就像今日头条的分类一样,那就会挤在一起,这个时候需要让tab可以横向滚动  只需要加入

    app:tabMode="scrollable"
    

     就可以让你的tab变的可以滚动,可以超出屏幕

    直接上代码:

    class MainActivity : AppCompatActivity(), TabLayout.OnTabSelectedListener {
        //tab文字
        private val titles = arrayOf("TAB1", "TAB2", "TAB3", "TAB4", "TAB5")
        //tab展示图片
        private val tabs = intArrayOf(R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher,R.mipmap.ic_launcher)
        //tab被选中后展示图片
        private val tabsSelect = intArrayOf(R.mipmap.vr,R.mipmap.vr,R.mipmap.vr,R.mipmap.vr,R.mipmap.vr)
        //tab关联的fragment列表
        private val fragments: ArrayList<Fragment> = ArrayList()
        private var pagerAdapter: FmPagerAdapter? = null
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            initData()
        }
        //初始化
        fun initData(){
            //关联tab和fragment
            for (i in 0 until tabs.size) {
                getFragment(i)?.let { fragments.add(it) }
                home_bottom_tab_tl.addTab(home_bottom_tab_tl.newTab())
            }
            // viewpager关联adapter
            home_bottom_tab_tl.setupWithViewPager(home_viewPager_vp,false);
            pagerAdapter = FmPagerAdapter(fragments,getSupportFragmentManager())
            home_viewPager_vp.setAdapter(pagerAdapter);
            // 给tab设置文字或者图片
            for (i in 0 until tabs.size) {
    //            home_bottom_tab_tl.getTabAt(i)?.setText(titles[i])
                home_bottom_tab_tl.getTabAt(i)?.setIcon(tabs[i])
            }
            //添加tab选中监听
            home_bottom_tab_tl.addOnTabSelectedListener(this)
            //设置默认选中第三个 从0开始
            home_bottom_tab_tl.getTabAt(2)?.select()
        }
    
        fun getFragment(num:Int): Fragment? {
            when(num){
                0 ->return OneFragment()
                1 ->return TwoFragment()
                2 ->return ThreeFragment()
                3 ->return FourFragment()
                4 ->return FiveFragment()
            }
            return null
        }
    
        internal class FmPagerAdapter(private val fragmentList: List<Fragment>?, fm: FragmentManager?) :
            FragmentPagerAdapter(fm!!) {
    
            override fun getCount(): Int {
                return if (fragmentList != null && !fragmentList.isEmpty()) fragmentList.size else 0
            }
    
            override fun getItem(position: Int): Fragment {
                return fragmentList!![position]
            }
    
        }
    
        override fun onTabReselected(p0: TabLayout.Tab?) {
    
        }
        //失去选中 改回原来的图片  文字的选中是在style里面设置的
        override fun onTabUnselected(p0: TabLayout.Tab?) {
            p0?.position?.let { home_bottom_tab_tl.getTabAt(it)?.setIcon(tabs[it]) }
        }
        //选中的的 图片设置
        override fun onTabSelected(p0: TabLayout.Tab?) {
            p0?.position?.let { home_bottom_tab_tl.getTabAt(it)?.setIcon(tabsSelect[it]) }
        }
    }
    

     activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:orientation="vertical"
            android:layout_alignParentBottom="true">
            <View
                android:layout_width="match_parent"
                android:layout_height="1dp"
                android:background="#0AF10A"/>
    
            <com.google.android.material.tabs.TabLayout
                android:id="@+id/home_bottom_tab_tl"
                style="@style/MyTablayoutStyle"
                android:layout_width="match_parent"
                android:layout_height="60dp"
                />
        </LinearLayout>
        <androidx.viewpager.widget.ViewPager
            android:id="@+id/home_viewPager_vp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="60dp"/>
    </RelativeLayout>
    

     tab的style设置

    <style name="MyTablayoutStyle" parent="Widget.Design.TabLayout">
            <item name="tabBackground">@color/color_FFFFFF</item>
            <item name="tabIndicatorColor">@color/color_00FFFFFF</item>
            <item name="tabSelectedTextColor">@color/color_3BCEF3</item>
            <item name="android:textSize">@dimen/middle_text_size</item>
            <item name="tabTextColor">@color/color_535353</item>
        </style>
    

      完工   非常简单

    demo地址:

    https://github.com/hch1991/TabLayout-ViewPager

  • 相关阅读:
    国内鲜为人知的“操作系统” Friend OS {Ep.1}
    好久没有发布什么内容了,今天推荐一个网站:Viritual x86
    温馨提示:yueming124.xyz的邮箱已经被我停用。
    Python
    Python -面试题
    码云-拉取远程代码
    mysql
    git 合并代码
    python 字典添加键值对 键相同值被覆盖的问题
    python 字典的减法
  • 原文地址:https://www.cnblogs.com/vampire-diaries/p/12753362.html
Copyright © 2011-2022 走看看