3状态的TabLayout有3种不同的颜色



我试图有一个tabLayout与3个不同的TextColor基于3个状态,我将做编程,基本上状态将是CURRENT,SEEN,UNSEEN和一切都是动态的。

问题是基本viewpager和更精确的tablayout只允许2种状态,即SELECTEDUNSELECTED。更不用说setCustomView,将添加(创建)视图而不是设置(更新)值,我最终堆叠视图…

我正在考虑重写TabLayout类或添加一些kotlin扩展,但不知道从哪里开始。

如果你们能指出一些方向,我将不胜感激!

提前感谢。

多亏了@Akaki给我指明了正确的方向:

首先创建了一个方法来改变tabTextColor:

private fun changeTabTextColor(tabLayout: TabLayout?, index: Int, mainColor: Boolean) {
if (index in 0 until maxPosition) {
val tab = tabLayout?.getTabAt(index)
val sb = SpannableString(tab?.text)
val color =
if (mainColor) ContextCompat.getColor(ctx, R.color.main_text_color)
else ContextCompat.getColor(ctx, R.color.secondary_text_color)
sb.setSpan(ForegroundColorSpan(color), 0, sb.length, 0)
tab?.text = sb
}
}

我在这里处理2种颜色,但如果需要,可以添加更多。

第二个关键部分是设置文本会破坏动画,所以我们需要在ViewPager中自己处理它:

binding.viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
override fun onPageScrollStateChanged(state: Int) {}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
tabLayout?.setScrollPosition(position, positionOffset, false)
}
override fun onPageSelected(position: Int) {}
})

这样动画将保持不变。

然后我玩了onTabSelected,并调用changeTabTextColor方法来满足我的需要。

最新更新