Android 自定义TabLayout

默认的TabLayout是没有花里胡哨的功能的,比如说我们可能希望它有边框,或者有背景颜色,或者外边框。因此就需要更改一些属性,或者在代码中实现。比如下图这种带边框,字体改变。

实现思路:

tablayout外层嵌套RelativeLayout,和viewpager配合使用





    


        

    

    



tab_background_ridus.xml



    
    
    
    
    

tabLayoutTextStyle 这个是自定义tablayout的字体大小等
    

 在代码中添加addOnTabSelectedListener进行监听,然后修改当前布局的圆角、颜色等值,默认选中的是0位置的tab

        binding.tabLayout.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
            override fun onTabReselected(tab: TabLayout.Tab) {
            }

            override fun onTabUnselected(tab: TabLayout.Tab) {
                setBackground(tab, false)
            }

            override fun onTabSelected(tab: TabLayout.Tab) {
                setBackground(tab, true)
            }
        })
        binding.tabLayout.getTabAt(0)?.let { setBackground(it, true) }

setBackground()中做的事情就是根据当前位置的不同,设置不同的布局

    private fun setBackground(tab: TabLayout.Tab, selected: Boolean) {
        var drawable: Drawable? = null
        when (tab.position) {
            0 -> {
                if (selected) {
                    drawable = getDrawable(R.drawable.tab_background_checked)
                } else {
                    drawable = getDrawable(R.drawable.tab_unchecked_first)
                }
            }
            1 -> {
                if (selected) {
                    drawable = getDrawable(R.drawable.tab_background_checked_second)
                } else {
                    drawable = getDrawable(R.drawable.tab_unchecked_second)
                }
            }
        }
        ViewCompat.setBackground(tab.view, drawable)
    }

比如,当第一个tab被选中时,我们希望它的左上左下都有圆角

也就是drawable为tab_background_checked文件


    
    

这样就可以实现定制的一些需求

ps:当时一开始想的是去重写tablayout,这样就可以自定义它的字体大小、边框等等,但是发现其实没有必要,tablayout已经通过接口、或者是xml帮我们实现好了。

一个参考资料 tablayout自定义总结

你可能感兴趣的:(Android,android,studio,android,android-studio)