美文网首页UIAndroid开发Android开发经验谈
Android Kotlin TabLayout 拓展:原生Ta

Android Kotlin TabLayout 拓展:原生Ta

作者: LOPER7 | 来源:发表于2020-12-10 11:16 被阅读0次

    google 原生 Tablayout( com.google.android.material.tabs.TabLayout) 零入侵拓展,帮你更便捷的使用原生TabLayout实现一些UI效果

    预览



    关于tablayout-ext

    tablayout-ext只是作为google material 库内tablayout控件的一个拓展,旨在于用毫无入侵且比较简单方便的方式使用tablayout的一些属性。作为一个原生组件迷,对github上各种大佬开源的tablayout也是十分倾佩的,但无论是在用法或是情节上,我总想用原生的控件去实现UI上的要求。再到使用 ViewPager2 | Android Developers 之后,发现原生控件之间的互相支持确实值得称赞。所以原生控件其实也很香,为什么不用起来呢?

    tablayout-ext目前只实现了一些非常常规的用法,采用kotlin拓展函数来进行链式调用。受限于原生tablayout的源码结构,诸如选中文字字体变大等需求,到目前为止我仍在思考如何在不入侵tablayout代码的情况下实现。读到这里,如果你有一个很好的实现思路,希望能在评论中不吝赐教。

    此库会持续更新,但更新时间不定,如果你在项目中使用到了此库并遇到了问题,可以在Github中找到我,并给Tablayout-ext提出 issue,我会在第一时间尝试处理这个问题。

    如何引入

    Step 1. 添加 JitPack repository

    allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }
    

    Step 2. 添加 Gradle依赖

    dependencies {
        ...
        implementation 'com.google.android.material:material:1.2.1'//google material 包
        implementation 'com.github.loperSeven:tablayout-ext:0.0.1'//此处不保证是否是最新版本,最新版本请前往github查看,仅支持androidX
    }
    
    
    

    如何使用

    注意:此库只是针对Tablayout做一些便捷性拓展,具体Tablayout属性及用法请查阅:developers 文档

    Indicator

      /**
        * 线性指示器
        * buildIndicator<> 指定指示器类
        * setHeight() 设置指示器高度,默认为tablayout指定tabIndicatorHeight高度
        * setWidth() 设置指示器宽度,若tablayout设置了tabIndicatorFullWidth=true,则默认为tab项宽度,否则为tab实际文字宽度
        * setGravity() 等同于 Tablayout.setSelectedTabIndicatorGravity()
        * setColor() 等同于 Tablayout.setSelectedTabIndicatorColor()
        */
     tabLayout.buildIndicator<LinearIndicator>()
                .setHeight(22.toPx())
                .setWidth(BaseIndicator.MATCH)
                .setGravity(TabLayout.INDICATOR_GRAVITY_TOP)
                .setColor(ContextCompat.getColor(context!!,R.color.colorAccent))
                .bind()
     /**
        * 三角形指示器
        * buildIndicator<> 指定指示器类
        * setPath 设置三角形样式 [POSITIVE]正 [NEGATIVE] 反
        */
     tabLayout.buildIndicator<TriangleIndicator>()
                .setPath(TriangleIndicator.Path.NEGATIVE)//因path为该指示器专有属性,故需先于其他属性调用。
                .setWidth(10.toPx())
                .setHeight(10.toPx())
                .setColor(ContextCompat.getColor(context!!,R.color.colorAccent))
                .setGravity(TabLayout.INDICATOR_GRAVITY_TOP)
                .bind()
            
     /**
        * 自定义deawable指示器
        * buildIndicator<> 指定指示器类
        * setDrawable 设置指示器drawable 可传入 Drawable 或 @DrawableRes resId:Int
        * 其他属性同上,皆为基础属性
        */
      tabLayout.buildIndicator<CustomIndicator>()
                .setDrawable(ContextCompat.getDrawable(context!!,R.mipmap.ic_indicator_fire)!!)
                .bind()
            
    

    如需拓展更多类型指示器,只需继承自BaseIndicator,添加专属属性,在bind()方法中实现逻辑即可。

    Text

     /**
        * tab文字设置
        * buildText<> 指定文字设置类
        * setNormalTextBold() 未选中状态下文字是否加粗  默认false
        * setSelectTextBold() 选中状态下文字是否加粗 默认true
        */
      tabLayout.buildText<BaseText>()
                .setNormalTextBold(true)
                .setSelectTextBold(true)
                .bind()
    

    混淆

    -dontwarn com.loper7.tablayout-ext.**
    -keep class com.loper7.tablayout-ext.**{*;}
    

    Github

    Tablayout-ext

    相关文章

      网友评论

        本文标题:Android Kotlin TabLayout 拓展:原生Ta

        本文链接:https://www.haomeiwen.com/subject/qoylgktx.html