protected void updateTab(TabLayout.Tab tab) { onUpdateTab(tab); }
/** * Sets auto tab mode adjustment enabled * * @param enabled True for enabled, otherwise false. */ public void setAutoAdjustTabModeEnabled(boolean enabled) { if (mAutoAdjustTabMode == enabled) { return; } mAutoAdjustTabMode = enabled; if (mAutoAdjustTabMode) { adjustTabMode(-1); } else { cancelPendingAdjustTabMode(); } }
@Override public void run() { mAdjustTabModeRunnable = null; adjustTabModeInternal(mTabLayout, prevScrollX1); } };
protected void handleOnDataSetChanged() { cancelPendingUpdateScrollPosition(); cancelPendingSetTabsFromPagerAdapter(); if (mSetTabsFromPagerAdapterRunnable == null) { mSetTabsFromPagerAdapterRunnable = new Runnable() { @Override public void run() { setTabsFromPagerAdapter(mTabLayout, mViewPager.getAdapter(), mViewPager.getCurrentItem()); } }; } mTabLayout.post(mSetTabsFromPagerAdapterRunnable); }
/** * Unregister internal listener objects, release object references, etc. * This method should be called in order to avoid memory leaks. */ public void release() { cancelPendingAdjustTabMode(); cancelPendingSetTabsFromPagerAdapter(); cancelPendingUpdateScrollPosition(); if (mInternalOnAdapterChangeListener != null) { mViewPager.removeOnAdapterChangeListener(mInternalOnAdapterChangeListener); mInternalOnAdapterChangeListener = null; } if (mInternalDataSetObserver != null) { mViewPager.getAdapter().unregisterDataSetObserver(mInternalDataSetObserver); mInternalDataSetObserver = null; } if (mInternalOnTabSelectedListener != null) { mTabLayout.removeOnTabSelectedListener(mInternalOnTabSelectedListener); mInternalOnTabSelectedListener = null; } if (mInternalTabLayoutOnPageChangeListener != null) { mViewPager.removeOnPageChangeListener(mInternalTabLayoutOnPageChangeListener); mInternalTabLayoutOnPageChangeListener = null; } mViewPager = null; mTabLayout = null; }
int count = adapter.getCount(); for (int i = 0; i < count; i++) { TabLayout.Tab tab = createNewTab(tabLayout, adapter, i); tabLayout.addTab(tab, false); updateTab(tab); adjustTabMode(prevScrollX); } else {
mTabLayoutHelper = new CustomTabLayoutHelper(mTabLayout, mViewPager); } else { mTabLayoutHelper = new TabLayoutHelper(mTabLayout, mViewPager); mTabLayoutHelper.setAutoAdjustTabModeEnabled(true);
protected void adjustTabModeInternal(@NonNull TabLayout tabLayout, int prevScrollX) { int prevTabMode = tabLayout.getTabMode(); tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE); tabLayout.setTabGravity(TabLayout.GRAVITY_CENTER); int newTabMode = determineTabMode(tabLayout); cancelPendingUpdateScrollPosition(); if (newTabMode == TabLayout.MODE_FIXED) { tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); tabLayout.setTabMode(TabLayout.MODE_FIXED); } else { LinearLayout slidingTabStrip = (LinearLayout) tabLayout.getChildAt(0); slidingTabStrip.setGravity(Gravity.CENTER_HORIZONTAL); if (prevTabMode == TabLayout.MODE_SCROLLABLE) { // restore scroll position tabLayout.scrollTo(prevScrollX, 0); } else { // scroll to current selected tab mUpdateScrollPositionRunnable = new Runnable() { @Override public void run() { mUpdateScrollPositionRunnable = null; updateScrollPosition(); } }; mTabLayout.post(mUpdateScrollPositionRunnable); } } }
@Override public void onAdapterChanged(@NonNull ViewPager viewPager, @Nullable PagerAdapter oldAdapter, @Nullable PagerAdapter newAdapter) { handleOnAdapterChanged(viewPager, oldAdapter, newAdapter); } };
protected void handleOnTabSelected(TabLayout.Tab tab) { if (mDuringSetTabsFromPagerAdapter) { return; } mViewPager.setCurrentItem(tab.getPosition()); cancelPendingUpdateScrollPosition(); }
@Override protected void onUpdateTab(TabLayout.Tab tab) { super.onUpdateTab(tab); int position = tab.getPosition(); View v = tab.getCustomView(); TextView tv = (TextView) v.findViewById(R.id.text); tv.setTextColor(Color.WHITE); tv.setText(tab.getText()); v.setBackgroundColor(getTabColor(position)); }
protected void adjustTabMode(int prevScrollX) { if (mAdjustTabModeRunnable != null) { return; } if (prevScrollX < 0) { prevScrollX = mTabLayout.getScrollX(); } if (ViewCompat.isLaidOut(mTabLayout)) { adjustTabModeInternal(mTabLayout, prevScrollX); } else { final int prevScrollX1 = prevScrollX; mAdjustTabModeRunnable = new Runnable() { @Override public void run() { mAdjustTabModeRunnable = null; adjustTabModeInternal(mTabLayout, prevScrollX1); } }; mTabLayout.post(mAdjustTabModeRunnable); } }