具有 3 种不同颜色的 3 种状态 TabLayout
3 states TabLayout with 3 differents colors
我正在尝试使用基于我将以编程方式执行的 3 种状态的 3 种不同 TextColor 的 tabLayout,基本上这些状态将是 CURRENT
、SEEN
、UNSEEN
一切都是动态的。
问题是基本的 viewpager 和更准确的 tablayout 只允许 2 个状态,即 SELECTED
和 UNSELECTED
。更不用说 setCustomView,将添加(创建)视图而不是设置(更新)值,我最终会堆叠视图...
我正在考虑覆盖 TabLayout class 或添加一些 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
来满足我的需要。
我正在尝试使用基于我将以编程方式执行的 3 种状态的 3 种不同 TextColor 的 tabLayout,基本上这些状态将是 CURRENT
、SEEN
、UNSEEN
一切都是动态的。
问题是基本的 viewpager 和更准确的 tablayout 只允许 2 个状态,即 SELECTED
和 UNSELECTED
。更不用说 setCustomView,将添加(创建)视图而不是设置(更新)值,我最终会堆叠视图...
我正在考虑覆盖 TabLayout class 或添加一些 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
来满足我的需要。