记一次TabLayout字体太粗解决办法

作者: Wang_Guan | 来源:发表于2018-11-15 14:42 被阅读19次

    最近接到一个需求,需要显示多个可滚动的分类列表,第一个想到的就是用TabLayout实现。实现是实现了,但是遇到同样字号,但是tab显示太粗的问题。先看看是怎样一个问题。

    系统默认状态

    图片我们可以看到,上面tab页的item明显比下面这个要粗,尤其是英文字母,更加的明显了,我设置的tab和下面这个TextView是同样的字号。除此之外,并无其他自定义属性了。

    • 为什么同样的字号tab页的item显示更粗呢?

    我初初认为有可能是TabLayout实现的时候自己把字体给加粗了。带着这个问题,我去查看了TabLayout的源码,发现其实现也是用TextView实现的,但是全局搜索之后发现,并没有看到起有设置字体style,亦或是typeface的相关代码。这就很奇怪了。于是,我将TabLayout的TextApperance Style加了一条属性textStyle为bold。

    textStyle

    ummmmmmm~~~~惊奇的发现。。。

    太粗了!

    所以说,前面的默认状态是没有加粗的,它就是这么粗!苍天饶过谁,设计嫌我的太粗了!由于也没有很仔细的看源码,至此也未明了tab为什么会这么粗。

    • 如何解决tab显示粗问题?

    TabLayout是可以自定义tabItem,或许这种方式可以解决这个问题。但是这里其实就只是显示文字而已,就无所谓自定义了。所以就放弃了这种方案,另寻方案。

    因为涉及到分类,所以列表显示肯定是要有的,这里实现的是TabLayout + ViewPager的实现方式,这两个控件搭配在一起可以实现联动,不需要自己add tab,只需要在viewpager的adapter里面重写getPagerTitle方法就可以了。这个方法返回一个CharSequence,这意味着什么呢?这意味着我们可以在返回tab文字之前进行一点加工。

    重写getPagerTitle方法

    我们知道,TabLayout里面的实现其实也是一个TextView,而这里返回的又是CharSequence,那么我们是可以给字符串设置span的,从而改变显示的一些属性。这里先是构建了一个SpannableString对象,然后对这个对象设置了span,因为前面已经认为不是TabLayout自己对文字进行加粗了,所以这里就怀疑是字体的原因,所以这里,设置了TypefaceSpan,来看一看设置后的效果。

    设置了TypeSpan

    变瘦了!不要两个月!不要两星期!也不需要两天!你只需要一行代码,就可以变瘦了!看来我们设置了Typeface之后,确实是使得TabLayout显示看起来是正常的了,但是至于默认状态下为什么是较粗的,现在还是不得解,哪位兄dei知道的,麻烦@一下🤣。

    至此,这个问题勉强算是解决了TabLayout默认状态下字体较粗的问题,这个方案对我来说是最简单最快的,但是或许自定义TabItem可能实现得更好,如果你跟我一样的需求,不妨也试试这个方法?😂

    相关文章

      网友评论

        本文标题:记一次TabLayout字体太粗解决办法

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