我在我的项目中使用TabLayout,可能有超过10个TabItems。现在我想在用户滚动TabLayout时隐藏其他视图。
注意:我没有使用任何ViewPager。
答案 0 :(得分:3)
每个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
private Point windowSize = new Point();
// Calculate the position if this window
getActivity().getWindowManager().getDefaultDisplay().getSize(windowSize);
通过使用上述方法,您将获得有关正确滚动位置的更新
答案 1 :(得分:1)
TabLayout有自己的标签更改侦听器回调功能。 使用
onPageChange Listener:
TabLayout.TabLayoutOnPageChangeListener(TabLayout tabLayout)
检查此链接:OnTabChange Listener了解更多信息
onTabSelected Listener:
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
@Override
public void onTabSelected(TabLayout.Tab tab){
int position = tab.getPosition();
}
});
答案 2 :(得分:-1)
如果您将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()方法中,您可以根据显示的标签执行所需的操作。