我正在使用TabLayout
显示不同标签页的图标和名称。使用TabLayout
时,我使用ViewPager
在每个标签上添加Fragments
。带有可点击标签的TabLayout
(它们位于点击中间的中间位置)正在工作,但是我想实现与RecyclerView
SnapHelper
相同的功能。如果我滚动TabLayout
选项卡,它将把视图捕捉到屏幕中央并将其选中。这应该在Fragment
下显示TabLayout
。
有什么办法吗?
这是我自定义的TabLayout,它将单击的视图居中居中。
class CenteredTabLayout : TabLayout {
constructor(context: Context) : super(context) {}
constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}
constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
super.onLayout(changed, l, t, r, b)
val firstTab = (getChildAt(0) as ViewGroup).getChildAt(0)
val lastTab = (getChildAt(0) as ViewGroup).getChildAt((getChildAt(0) as ViewGroup).childCount - 1)
if (firstTab != null && lastTab != null){
ViewCompat.setPaddingRelative(getChildAt(0), width / 2 - firstTab.width / 2, 0, width / 2 - lastTab.width / 2, 0)
}
}
}
答案 0 :(得分:0)
TabLayout selected tab gravity
tl; dr使用默认的TabLayout,您不能修改捕捉效果。因为计算其移动calculateScrollXForTab
的距离的方法是私有的,因此无法替代。
我也想对TabLayout进行一些自定义捕捉。最终我放弃了,并为选项卡创建了自己的RecyclerView和适配器。我不需要由TabLayout提供的指示符(创建了我的自定义指示符)。因此,我要做的就是使用适配器实现ViewPager.OnPageChangeListener
。
还请阅读滚动如何真正帮助了我其他源代码。