Android Kotlin TabLayout 拓展:原生TabLayout其实也很香


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345