Custom selected tab text color in SlidingTabLayout

前端 未结 6 1999
执笔经年
执笔经年 2020-12-13 14:14

I\'m using the SlidingTabLayout from google (https://developer.android.com/samples/SlidingTabsBasic/src/com.example.android.common/view/SlidingTabLayout.html).

It wo

6条回答
  •  感动是毒
    2020-12-13 15:05

    In case anyone is interested in another solution without using a Selector XML resource file, here is one somehow based on @Panayiotis' answer.

    Add the below methods to the SlidingTabStrip.java class:

    public void setTabTitlesTextColor(int selectedPosition) {
        for (int i = 0; i < getChildCount(); i++) {
            if (TextView.class.isInstance(getChildAt(i))) {
                ((TextView) getChildAt(i)).setTextColor((selectedPosition == i) ? getTabColorizer().getIndicatorColor(i) : Color.argb(90, 0,0,0)  );
            }
        }
    }
    
    public SlidingTabLayout.TabColorizer getTabColorizer() {
        if (mCustomTabColorizer != null)
            return mCustomTabColorizer;
        else
            return mDefaultTabColorizer;
    }
    

    Call the newly created setTabTitlesTextColor() method in onPageSelected and setViewPager on the SlidingTabLayout.java class as below:

    public void setViewPager(ViewPager viewPager) {
        mTabStrip.removeAllViews();
    
        mViewPager = viewPager;
        if (viewPager != null) {
            viewPager.setOnPageChangeListener(new InternalViewPagerListener());
            populateTabStrip();
            mTabStrip.setTabTitlesTextColor(viewPager.getCurrentItem());
        }
    }
    
    @Override
        public void onPageSelected(int position) {
            if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
                mTabStrip.onViewPagerPageChanged(position, 0f);
                scrollToTab(position, 0);
            }
    
            mTabStrip.setTabTitlesTextColor(position);
    
            if (mViewPagerPageChangeListener != null) {
                mViewPagerPageChangeListener.onPageSelected(position);
            }
        }
    

提交回复
热议问题