我在我的项目中使用TabLayout,可能有超过10个TabItems。现在我想在用户滚动TabLayout时隐藏其他视图。
注意:我没有使用任何ViewPager。
View的每个实例都调用getViewTreeObserver()
。你可以使用OnScrollChangedListener()
为它添加一个addOnScrollChangedListener()
。
在你的情况下:
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
});
windowSize是从WindowManager
访问的Point
private Point windowSize = new Point();
// Calculate the position if this window
getActivity().getWindowManager().getDefaultDisplay().getSize(windowSize);
通过使用上述方法,您将获得有关所需的正确滚动位置的更新
TabLayout具有自己的选项卡更改侦听器回调功能。采用
onPageChange Listener:
TabLayout.TabLayoutOnPageChangeListener(TabLayout tabLayout)
查看此链接:OnTabChange Listener了解更多信息
onTabSelected监听器:
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
@Override
public void onTabSelected(TabLayout.Tab tab){
int position = tab.getPosition();
}
});
如果您将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){
}
});
在onPageSelected()方法中,您可以根据显示的选项卡执行所需的操作。