Android 如何为TabLayout设置捕捉行为

Android 如何为TabLayout设置捕捉行为,android,android-fragments,android-viewpager,android-tablayout,Android,Android Fragments,Android Viewpager,Android Tablayout,我正在使用TabLayout显示不同选项卡的图标和名称。使用TabLayout我使用ViewPager为每个选项卡添加片段带有可单击选项卡的TabLayout(它们在单击时居中)正在工作,但我希望实现与回收视图SnapHelper相同的功能。如果我滚动TabLayout选项卡,它会将视图捕捉到屏幕中央并选择它。这应该在表格布局下显示片段 有办法吗 这是我的自定义表格布局,它将在视图中间单击鼠标中键 class CenteredTabLayout : TabLayout { constru

我正在使用
TabLayout
显示不同选项卡的图标和名称。使用
TabLayout
我使用
ViewPager
为每个选项卡添加
片段<代码>带有可单击选项卡的TabLayout
(它们在单击时居中)正在工作,但我希望实现与
回收视图
SnapHelper
相同的功能。如果我滚动
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)
        }
    }
}

tl;如果使用默认的表格布局,则无法修改捕捉效果。因为计算其移动距离的方法是私有的,无法替换

我也想用我的TabLayout做一些定制的快照。最终我放弃了,为标签创建了自己的RecyclerView和适配器。我不需要TabLayout(创建我的自定义指示器)提供的指示器。所以我所要做的就是使用我的适配器实现
ViewPager.OnPageChangeListener

同时,阅读其他源代码如何使滚动真正帮助了我

比如说,