目前使用的是viewpage2+tablayout方式
看过一些文章,思路就是禁用tab view的长按事件
for (i in 0 until mTabLayout.tabCount) {
mTabLayout.getTabAt(i)?.view?.isLongClickable = false
mTabLayout.getTabAt(i)?.view?.tooltipText = null
}
但是上述方法中,直接调用后发现 mTabLayout.getTabAt(i)?.view?.isLongClickable = false这行代码无效,必须在tablayout绘制完成之后设置才有用
以下是可用的修改方法
1.对tablayout设置绘制完成监听,然后禁用tab view长按事件
var onGlobalLayoutListener = object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
mTabLayout.viewTreeObserver.removeOnGlobalLayoutListener(this)
for (i in 0 until mTabLayout.tabCount) {
mTabLayout.getTabAt(i)?.view?.isLongClickable = false
mTabLayout.getTabAt(i)?.view?.tooltipText = null
}
}
}
mTabLayout.viewTreeObserver.addOnGlobalLayoutListener(onGlobalLayoutListener)
注意:onGlobalLayout会回调多次,需要在第一次回调的时候移除listener, 保证代码只走一次
2.在TabLayoutMediator的TabConfigurationStrategy的onConfigureTab回调方法里面设置,这种方法更简单
TabLayoutMediator(
mTabLayout, mViewPager
) { tab, position ->
tab.view.setOnLongClickListener{true}
tab.view.tooltipText = null}.attach()
注意:使用此方法的时候,要消费掉tab view的long click事件,返回true tab.view.setOnLongClickListener{true}