我在我的项目中使用了TabLayout,该项目可能有10个以上的TabItems。现在我想在用户滚动 TabLayout 时隐藏另一个视图。
注意:我没有使用任何ViewPager。
View 的每个实例都调用getViewTreeObserver()
。您可以使用 addOnScrollChangedListener()
向其添加OnScrollChangedListener()
。
在您的情况下:
tabLayout.getViewTreeObserver().addOnScrollChangedListener(() -> {
int scrollX = tabLayout.getScrollX(); // Current x scrolling position
// We know that we have at least one child
int maxScrollWidth = categoryTabLayout.getChildAt(0).getMeasuredWidth() - windowSize.x;
// Do whatever you want here
});
窗口大小是从WindowManager
访问的点
private Point windowSize = new Point();
// Calculate the position if this window
getActivity().getWindowManager().getDefaultDisplay().getSize(windowSize);
通过使用上述方法,您将获得有关所需正确滚动位置的更新
TabLayout 有自己的选项卡更改侦听器回调功能。用
页面更改侦听器:
TabLayout.TabLayoutOnPageChangeListener(TabLayout tabLayout)
检查此链接: OnTab 更改侦听器以获取详细信息
在选项卡所选侦听器上:
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
@Override
public void onTabSelected(TabLayout.Tab tab){
int position = tab.getPosition();
}
});
检查更多信息:onTabSelected Listener
如果您将 TabLayout 与 ViewPager 一起使用,如下所示:
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
然后,您可以使用:
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener(){
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels){
}
@Override
public void onPageSelected(int position){
}
@Override
public void onPageScrollStateChanged(int state){
}
});
在方法中 PageSelected(),您可以根据显示的选项卡执行所需的操作。
当您滚动到最后一个选项卡可见时,我得到了解决方案。下面是给出的代码。希望它会有所帮助。
val lastTabIndex = yourTabLayout.tabCount - 1
val lastTab = yourTabLayout.getTabAt(lastTabIndex)
yourTabLayout.getViewTreeObserver().addOnScrollChangedListener {
val scrollX = yourTabLayout.scrollX
val tabsWidth = yourTabLayout.getChildAt(0).width
val tabsViewWidth = yourTabLayout.width
if (scrollX + tabsViewWidth >= tabsWidth) {
// Tabs are scrolled to the right end
// You can perform any actions you need here
// Get the last tab and do whatever you need with it
lastTab?.let {
//perform the action with last tab
}
}else{
/* Write the code when your are not in last tab position.
*/
}
}