当前位置: 代码迷 >> 综合 >> TabLayout组件常用接口及方法总结
  详细解决方案

TabLayout组件常用接口及方法总结

热度:41   发布时间:2024-02-20 02:02:32.0

TabLayout 继承自HorizontalScrollView 源码有2000多行,定义了多个内部类和静态内部类,熟悉总结常用的类和方法即可。

(1)TabLayoutOnPageChangeListener

A {@link ViewPager.OnPageChangeListener} class which contains the necessary calls back to the provided {@link TabLayout} so that the tab position is kept in sync.

【译文】一个{@link: viewpage.OnPageChangeListener}类,它包含对提供的{@link TabLayout}的必要调用,以便使选项卡位置保持同步。

This class stores the provided TabLayout weakly, meaning that you can use{@link ViewPager#addOnPageChangeListener(

ViewPager.OnPageChangeListener)、addOnPageChangeListener(OnPageChangeListener)} without removing the listener and

not cause a leak.

【译文】这个类弱地存储了提供的TabLayout,这意味着您可以使用{@linkViewPager#addOnPageChangeListener(ViewPager.OnPageChangeListener)、addOnPageChangeListener(OnPageChangeListener)},不删除侦听器,不会导致泄漏。

public static class TabLayoutOnPageChangeListener implements ViewPager.OnPageChangeListener {private final WeakReference<TabLayout> mTabLayoutRef;private int mPreviousScrollState;private int mScrollState;public TabLayoutOnPageChangeListener(TabLayout tabLayout) {mTabLayoutRef = new WeakReference<>(tabLayout);}@Overridepublic void onPageScrollStateChanged(final int state) {mPreviousScrollState = mScrollState;mScrollState = state;}@Overridepublic void onPageScrolled(final int position, final float positionOffset,final int positionOffsetPixels) {final TabLayout tabLayout = mTabLayoutRef.get();if (tabLayout != null) {// Only update the text selection if we're not settling, or we are settling after// being draggedfinal boolean updateText = mScrollState != SCROLL_STATE_SETTLING ||mPreviousScrollState == SCROLL_STATE_DRAGGING;// Update the indicator if we're not settling after being idle. This is caused// from a setCurrentItem() call and will be handled by an animation from// onPageSelected() instead.final boolean updateIndicator = !(mScrollState == SCROLL_STATE_SETTLING&& mPreviousScrollState == SCROLL_STATE_IDLE);tabLayout.setScrollPosition(position, positionOffset, updateText, updateIndicator);}}@Overridepublic void onPageSelected(final int position) {final TabLayout tabLayout = mTabLayoutRef.get();if (tabLayout != null && tabLayout.getSelectedTabPosition() != position&& position < tabLayout.getTabCount()) {// Select the tab, only updating the indicator if we're not being dragged/settled// (since onPageScrolled will handle that).final boolean updateIndicator = mScrollState == SCROLL_STATE_IDLE|| (mScrollState == SCROLL_STATE_SETTLING&& mPreviousScrollState == SCROLL_STATE_IDLE);tabLayout.selectTab(tabLayout.getTabAt(position), updateIndicator);}}void reset() {mPreviousScrollState = mScrollState = SCROLL_STATE_IDLE;}}