long1eu / SpaceTabLayout

Not actively maintained, but PR are welcomed

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Add more tabs !!

mhrlive opened this issue · comments

commented

Hello, nice TabLayout design, but can I easily add more tabs ?!

commented

This one I made with 6 tabs:

SpaceTabLayout.java:
`
@SuppressWarnings("unused")
public class SpaceTabLayout extends RelativeLayout {

private TabLayout tabLayout;

private Tab tabOne;
private Tab tabTwo;
private Tab tabThree;
private Tab tabFour;
private Tab tabFive;
private Tab tabsix;
private Tab tabseven;

private RelativeLayout parentLayout;
private RelativeLayout selectedTabLayout;
private FloatingActionButton actionButton;
private ImageView backgroundImage;
private ImageView backgroundImage2;

private TextView tabOneTextView;
private TextView tabTwoTextView;
private TextView tabThreeTextView;

private String text_one;
private String text_two;
private String text_three;

private ImageView tabOneImageView;
private ImageView tabTwoImageView;
private ImageView tabThreeImageView;
private ImageView tabFourImageView;
private ImageView tabFiveImageView;
private ImageView tabsixImageView;
private ImageView tabsevenImageView;

private List<Tab> tabs = new ArrayList<>();
private List<Integer> tabSize = new ArrayList<>();

private int numberOfTabs = 3;
private int currentPosition;
private int startingPosition;

private OnClickListener tabOneOnClickListener;
private OnClickListener tabTwoOnClickListener;
private OnClickListener tabThreeOnClickListener;
private OnClickListener tabFourOnClickListener;
private OnClickListener tabFiveOnClickListener;
private OnClickListener tabsixOnClickListener;
private OnClickListener tabsevenOnClickListener;


private Drawable defaultTabOneButtonIcon;
private Drawable defaultTabTwoButtonIcon;
private Drawable defaultTabThreeButtonIcon;
private Drawable defaultTabFourButtonIcon;
private Drawable defaultTabFiveButtonIcon;
private Drawable defaultTabsixButtonIcon;
private Drawable defaultTabsevenButtonIcon;

private int defaultTextColor;
private int defaultButtonColor;
private int defaultTabColor;

private boolean iconOnly = false;

private boolean SCROLL_STATE_DRAGGING = false;

private static final String CURRENT_POSITION_SAVE_STATE = "buttonPosition";

public SpaceTabLayout(Context context) {
    super(context);
    init();
}

public SpaceTabLayout(Context context, AttributeSet attrs) {
    super(context, attrs);
    init();
    initArrts(attrs);
}

public SpaceTabLayout(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    initArrts(attrs);
    init();
}

private void init() {
    LayoutInflater.from(getContext()).inflate(R.layout.three_tab_space_layout, this);

    parentLayout = (RelativeLayout) findViewById(R.id.tabLayout);

    selectedTabLayout = (RelativeLayout) findViewById(R.id.selectedTabLayout);

    backgroundImage = (ImageView) findViewById(R.id.backgroundImage);
    backgroundImage2 = (ImageView) findViewById(R.id.backgroundImage2);

    actionButton = (FloatingActionButton) findViewById(R.id.fab);

    tabLayout = (TabLayout) findViewById(R.id.spaceTab);

    defaultTabOneButtonIcon = getContext().getResources().getDrawable(R.drawable.wifii);
    defaultTabTwoButtonIcon = getContext().getResources().getDrawable(R.drawable.networkk);
    defaultTabThreeButtonIcon = getContext().getResources().getDrawable(R.drawable.baseline_search_white_48dp);
    defaultTabFourButtonIcon = getContext().getResources().getDrawable(R.drawable.routerr);
    defaultTabFiveButtonIcon = getContext().getResources().getDrawable(R.drawable.save);
    defaultTabsixButtonIcon = getContext().getResources().getDrawable(R.drawable.key);
    defaultTabsevenButtonIcon = getContext().getResources().getDrawable(R.drawable.aboutxml);

    defaultTextColor = ContextCompat.getColor(getContext(), android.R.color.primary_text_dark);

    defaultButtonColor = ContextCompat.getColor(getContext(), R.color.colorAccent);

    defaultTabColor = ContextCompat.getColor(getContext(), R.color.colorPrimary);
}

private void initArrts(AttributeSet attrs) {
    TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.SpaceTabLayout);
    for (int i = 0; i < a.getIndexCount(); ++i) {
        int attr = a.getIndex(i);
        if (attr == R.styleable.SpaceTabLayout_number_of_tabs) {
            numberOfTabs = a.getInt(attr, 3);
            if (numberOfTabs == 0) {
                numberOfTabs = 3;
                iconOnly = true;
            }
        } else if (attr == R.styleable.SpaceTabLayout_starting_position) {
            startingPosition = a.getInt(attr, 0);
            int test = startingPosition + 1;
            if (test > numberOfTabs) {
                switch (numberOfTabs) {
                    case 3:
                        startingPosition = 1;
                        actionButton.setImageDrawable(defaultTabTwoButtonIcon);
                        actionButton.setOnClickListener(tabTwoOnClickListener);
                        break;
                    case 4:
                        startingPosition = 0;
                        actionButton.setImageDrawable(defaultTabOneButtonIcon);
                        actionButton.setOnClickListener(tabOneOnClickListener);
                        break;
                    case 5:
                        startingPosition = 2;
                        actionButton.setImageDrawable(defaultTabThreeButtonIcon);
                        actionButton.setOnClickListener(tabThreeOnClickListener);
                        break;
                }
            } else {
                switch (startingPosition) {
                    case 0:
                        actionButton.setImageDrawable(defaultTabOneButtonIcon);
                        actionButton.setOnClickListener(tabOneOnClickListener);
                        break;
                    case 1:
                        actionButton.setImageDrawable(defaultTabTwoButtonIcon);
                        actionButton.setOnClickListener(tabTwoOnClickListener);
                        break;
                    case 2:
                        actionButton.setImageDrawable(defaultTabThreeButtonIcon);
                        actionButton.setOnClickListener(tabThreeOnClickListener);
                        break;
                    case 3:
                        actionButton.setImageDrawable(defaultTabFourButtonIcon);
                        actionButton.setOnClickListener(tabFourOnClickListener);
                        break;
                    case 4:
                        actionButton.setImageDrawable(defaultTabFiveButtonIcon);
                        actionButton.setOnClickListener(tabFiveOnClickListener);
                        break;
                    case 5:
                        actionButton.setImageDrawable(defaultTabsixButtonIcon);
                        actionButton.setOnClickListener(tabsixOnClickListener);
                        break;
                    case 6:
                        actionButton.setImageDrawable(defaultTabsevenButtonIcon);
                        actionButton.setOnClickListener(tabsevenOnClickListener);
                        break;
                }
            }
        } else if (attr == R.styleable.SpaceTabLayout_tab_color) {
            defaultTabColor = a.getColor(attr, getContext().getResources().getIdentifier("colorAccent", "color", getContext().getPackageName()));

        } else if (attr == R.styleable.SpaceTabLayout_button_color) {
            defaultButtonColor = a.getColor(attr, getContext().getResources().getIdentifier("colorPrimary", "color", getContext().getPackageName()));

        } else if (attr == R.styleable.SpaceTabLayout_text_color) {
            defaultTextColor = a.getColor(attr, ContextCompat.getColor(getContext(), android.R.color.primary_text_dark));

        } else if (attr == R.styleable.SpaceTabLayout_icon_one) {
            defaultTabOneButtonIcon = a.getDrawable(attr);

        } else if (attr == R.styleable.SpaceTabLayout_icon_two) {
            defaultTabTwoButtonIcon = a.getDrawable(attr);

        } else if (attr == R.styleable.SpaceTabLayout_icon_three) {
            defaultTabThreeButtonIcon = a.getDrawable(attr);

        } else if (attr == R.styleable.SpaceTabLayout_icon_four) {
            if (numberOfTabs > 3)
                defaultTabFourButtonIcon = a.getDrawable(attr);

        } else if (attr == R.styleable.SpaceTabLayout_icon_five) {
            if (numberOfTabs > 4)
                defaultTabFiveButtonIcon = a.getDrawable(attr);

        } else if (attr == R.styleable.SpaceTabLayout_icon_six) {
            if (numberOfTabs > 5)
                defaultTabsixButtonIcon = a.getDrawable(attr);

        } else if (attr == R.styleable.SpaceTabLayout_icon_seven) {
            if (numberOfTabs > 6)
                defaultTabsevenButtonIcon = a.getDrawable(attr);

        } else if (attr == R.styleable.SpaceTabLayout_text_one) {
            text_one = a.getString(attr);

        } else if (attr == R.styleable.SpaceTabLayout_text_two) {
            text_two = a.getString(attr);

        } else if (attr == R.styleable.SpaceTabLayout_text_three) {
            text_three = a.getString(attr);

        }
    }
    a.recycle();
}

/**
 * This will initialize the View and the ViewPager to properly display
 * the fragments from the list.
 *
 * @param viewPager       where you want the fragments to show
 * @param fragmentManager needed for the fragment transactions
 * @param fragments       fragments to be displayed
 */
public void initialize(ViewPager viewPager, FragmentManager fragmentManager, List<Fragment> fragments) {
    if (numberOfTabs < fragments.size() || numberOfTabs > fragments.size())
        throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
    viewPager.setAdapter(new PagerAdapter(fragmentManager, fragments));

    tabLayout.setupWithViewPager(viewPager);

    getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    tabSize.add(tabOne.getCustomView().getWidth());
                    tabSize.add(getWidth());
                    tabSize.add(backgroundImage.getWidth());

                    moveTab(tabSize, startingPosition);

                    if (currentPosition == 0) {
                        currentPosition = startingPosition;
                        tabs.get(startingPosition).getCustomView().setAlpha(0);
                    } else moveTab(tabSize, currentPosition);

                    if (Build.VERSION.SDK_INT < 16)
                        getViewTreeObserver().removeGlobalOnLayoutListener(this);
                    else getViewTreeObserver().removeOnGlobalLayoutListener(this);
                }
            });


    viewPager.setCurrentItem(startingPosition);
    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
            if (SCROLL_STATE_DRAGGING) {
                tabs.get(position).getCustomView().setAlpha(positionOffset);
                if (position < numberOfTabs - 1) {
                    tabs.get(position + 1).getCustomView().setAlpha(1 - positionOffset);
                }

                if (!tabSize.isEmpty()) {
                    if (position < currentPosition) {
                        final float endX = -tabSize.get(2) / 2 + getX(position, tabSize) + 42;
                        final float startX = -tabSize.get(2) / 2 + getX(currentPosition, tabSize) + 42;

                        if (!tabSize.isEmpty()) {
                            float a = endX - (positionOffset * (endX - startX));
                            selectedTabLayout.setX(a);
                        }

                    } else {
                        position++;
                        final float endX = -tabSize.get(2) / 2 + getX(position, tabSize) + 42;
                        final float startX = -tabSize.get(2) / 2 + getX(currentPosition, tabSize) + 42;

                        float a = startX + (positionOffset * (endX - startX));
                        selectedTabLayout.setX(a);
                    }
                }
            }
        }

        @Override
        public void onPageSelected(int position) {
            for (Tab t : tabs) t.getCustomView().setAlpha(1);
            tabs.get(position).getCustomView().setAlpha(0);
            moveTab(tabSize, position);
            currentPosition = position;
        }

        @Override
        public void onPageScrollStateChanged(int state) {
            SCROLL_STATE_DRAGGING = state == ViewPager.SCROLL_STATE_DRAGGING;
            if (state == ViewPager.SCROLL_STATE_SETTLING) {
                for (Tab t : tabs) t.getCustomView().setAlpha(1);
                tabs.get(currentPosition).getCustomView().setAlpha(0);
                moveTab(tabSize, currentPosition);
            }
        }
    });

    tabOne = tabLayout.getTabAt(0);
    tabTwo = tabLayout.getTabAt(1);
    tabThree = tabLayout.getTabAt(2);
    if (numberOfTabs > 3) tabFour = tabLayout.getTabAt(3);
    if (numberOfTabs > 4) tabFive = tabLayout.getTabAt(4);
    if (numberOfTabs > 5) tabsix = tabLayout.getTabAt(5);
    if (numberOfTabs > 6) tabseven = tabLayout.getTabAt(6);

    if (numberOfTabs == 3 && !iconOnly) {
        tabOne.setCustomView(R.layout.icon_text_tab_layout);
        tabTwo.setCustomView(R.layout.icon_text_tab_layout);
        tabThree.setCustomView(R.layout.icon_text_tab_layout);

        tabs.add(tabOne);
        tabs.add(tabTwo);
        tabs.add(tabThree);

        tabOneTextView = (TextView) tabOne.getCustomView().findViewById(R.id.tabTextView);
        tabTwoTextView = (TextView) tabTwo.getCustomView().findViewById(R.id.tabTextView);
        tabThreeTextView = (TextView) tabThree.getCustomView().findViewById(R.id.tabTextView);

        tabOneImageView = (ImageView) tabOne.getCustomView().findViewById(R.id.tabImageView);
        tabTwoImageView = (ImageView) tabTwo.getCustomView().findViewById(R.id.tabImageView);
        tabThreeImageView = (ImageView) tabThree.getCustomView().findViewById(R.id.tabImageView);

    } else {

        tabOne.setCustomView(R.layout.icon_tab_layout);
        tabTwo.setCustomView(R.layout.icon_tab_layout);
        tabThree.setCustomView(R.layout.icon_tab_layout);
        if (numberOfTabs > 3) tabFour.setCustomView(R.layout.icon_tab_layout);
        if (numberOfTabs > 4) tabFive.setCustomView(R.layout.icon_tab_layout);
        tabsix.setCustomView(R.layout.icon_tab_layout);
        tabseven.setCustomView(R.layout.icon_tab_layout);

        tabs.add(tabOne);
        tabs.add(tabTwo);
        tabs.add(tabThree);
        if (numberOfTabs > 3) tabs.add(tabFour);
        if (numberOfTabs > 4) tabs.add(tabFive);
        if (numberOfTabs > 5) tabs.add(tabsix);
        if (numberOfTabs > 6) tabs.add(tabseven);

        tabOneImageView = (ImageView) tabOne.getCustomView().findViewById(R.id.tabImageView);
        tabTwoImageView = (ImageView) tabTwo.getCustomView().findViewById(R.id.tabImageView);
        tabThreeImageView = (ImageView) tabThree.getCustomView().findViewById(R.id.tabImageView);
        if (numberOfTabs > 3)
            tabFourImageView = (ImageView) tabFour.getCustomView().findViewById(R.id.tabImageView);
        if (numberOfTabs > 4)
            tabFiveImageView = (ImageView) tabFive.getCustomView().findViewById(R.id.tabImageView);
        if (numberOfTabs > 5)
            tabsixImageView = (ImageView) tabsix.getCustomView().findViewById(R.id.tabImageView);
        if (numberOfTabs > 6)
            tabsevenImageView = (ImageView) tabseven.getCustomView().findViewById(R.id.tabImageView);

    }

    selectedTabLayout.bringToFront();
    tabLayout.setSelectedTabIndicatorHeight(0);
    setAttrs();
}


private void setAttrs() {
    setTabColor(defaultTabColor);

    setButtonColor(defaultButtonColor);

    if (numberOfTabs == 3 && !iconOnly) {
        if (text_one != null) setTabOneText(text_one);
        if (text_two != null) setTabTwoText(text_two);
        if (text_three != null) setTabThreeText(text_three);

        setTabOneTextColor(defaultTextColor);
        setTabTwoTextColor(defaultTextColor);
        setTabThreeTextColor(defaultTextColor);
    }

    setTabOneIcon(defaultTabOneButtonIcon);
    setTabTwoIcon(defaultTabTwoButtonIcon);
    setTabThreeIcon(defaultTabThreeButtonIcon);
    if (numberOfTabs > 3) setTabFourIcon(defaultTabFourButtonIcon);
    if (numberOfTabs > 4) setTabFiveIcon(defaultTabFiveButtonIcon);
    if (numberOfTabs > 5) setTabsixIcon(defaultTabsixButtonIcon);
    if (numberOfTabs > 6) setTabsevenIcon(defaultTabsevenButtonIcon);

}

private void moveTab(List<Integer> tabSize, int position) {
    if (!tabSize.isEmpty()) {
        float backgroundX = -tabSize.get(2) / 2 + getX(position, tabSize) + 42;
        switch (position) {
            case 0:
                actionButton.setImageDrawable(defaultTabOneButtonIcon);
                actionButton.setOnClickListener(tabOneOnClickListener);
                break;
            case 1:
                actionButton.setImageDrawable(defaultTabTwoButtonIcon);
                actionButton.setOnClickListener(tabTwoOnClickListener);
                break;
            case 2:
                actionButton.setImageDrawable(defaultTabThreeButtonIcon);
                actionButton.setOnClickListener(tabThreeOnClickListener);
                break;
            case 3:
                actionButton.setImageDrawable(defaultTabFourButtonIcon);
                actionButton.setOnClickListener(tabFourOnClickListener);
                break;
            case 4:
                actionButton.setImageDrawable(defaultTabFiveButtonIcon);
                actionButton.setOnClickListener(tabFiveOnClickListener);
                break;
            case 5:
                actionButton.setImageDrawable(defaultTabsixButtonIcon);
                actionButton.setOnClickListener(tabsixOnClickListener);
                break;
            case 6:
                actionButton.setImageDrawable(defaultTabsevenButtonIcon);
                actionButton.setOnClickListener(tabsevenOnClickListener);
                break;

        }

        selectedTabLayout.animate().x(backgroundX).setDuration(100);
    }
}

private float getX(int position, List<Integer> sizesList) {
    if (!sizesList.isEmpty()) {
        float tabWidth = sizesList.get(0);

        float numberOfMargins = 2 * numberOfTabs;
        float itemsWidth = (int) (numberOfTabs * tabWidth);
        float marginsWidth = sizesList.get(1) - itemsWidth;

        float margin = marginsWidth / numberOfMargins;

        //TODO: this is a magic number
        float half = 42;


        float x = 0;
        switch (position) {
            case 0:
                x = tabWidth / 2 + margin - half;
                break;
            case 1:
                x = tabWidth * 3 / 2 + 3 * margin - half;
                break;
            case 2:
                x = tabWidth * 5 / 2 + 5 * margin - half;
                break;
            case 3:
                x = tabWidth * 7 / 2 + 7 * margin - half;
                break;
            case 4:
                x = tabWidth * 9 / 2 + 9 * margin - half;
                break;
            case 5:
                x = tabWidth * 11 / 2 + 11 * margin - half;
                break;
            case 6:
                x = tabWidth * 13 / 2 + 13 * margin - half;
                break;

        }
        return x;
    }
    return 0;
}

@Override
protected Parcelable onSaveInstanceState() {
    Parcelable superState = super.onSaveInstanceState();
    SavedState savedState = new SavedState(superState);
    savedState.currentPosition = this.currentPosition;
    return savedState;
}

@Override
protected void onRestoreInstanceState(Parcelable state) {
    if (!(state instanceof SavedState)) {
        super.onRestoreInstanceState(state);
        return;
    }

    SavedState ss = (SavedState) state;
    super.onRestoreInstanceState(ss.getSuperState());

    this.currentPosition = ss.currentPosition;
}

//TODO: get this working :))
private void setCurrentPosition(int currentPosition) {

}

/**
 * You can use it, for example, if want to set the same listener to all
 * buttons and you can use a switch using this method to identify the
 * button that was pressed.
 *
 * @return the current tab position
 */
public int getCurrentPosition() {
    return currentPosition;
}

/**
 * Used to set the same OnClickListener to each position of the button.
 *
 * @param l the listener you want to set
 */
@Override
public void setOnClickListener(OnClickListener l) {
    setTabOneOnClickListener(l);
    setTabTwoOnClickListener(l);
    setTabThreeOnClickListener(l);
    if (numberOfTabs > 3) setTabFourOnClickListener(l);
    if (numberOfTabs > 4) setTabFiveOnClickListener(l);
    if (numberOfTabs > 5) setTabsixOnClickListener(l);
    if (numberOfTabs > 6) setTabsevenOnClickListener(l);

}


/***********************************************************************************************
 * getters and setters for the OnClickListeners of each tab position
 **********************************************************************************************/
public OnClickListener getTabOneOnClickListener() {
    return tabOneOnClickListener;
}

public OnClickListener getTabTwoOnClickListener() {
    return tabTwoOnClickListener;
}

public OnClickListener getTabThreeOnClickListener() {
    return tabThreeOnClickListener;
}

public OnClickListener getTabFourOnClickListener() {
    return tabFourOnClickListener;
}

public OnClickListener getTabFiveOnClickListener() {
    return tabFiveOnClickListener;
}

public OnClickListener getTabsixOnClickListener() {
    return tabsixOnClickListener;
}

public OnClickListener getTabsevenOnClickListener() {
    return tabsevenOnClickListener;
}

public void setTabOneOnClickListener(OnClickListener l) {
    tabOneOnClickListener = l;
}

public void setTabTwoOnClickListener(OnClickListener l) {
    tabTwoOnClickListener = l;
}

public void setTabThreeOnClickListener(OnClickListener l) {
    tabThreeOnClickListener = l;
}

public void setTabFourOnClickListener(OnClickListener l) {
    if (numberOfTabs > 3) tabFourOnClickListener = l;
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabFiveOnClickListener(OnClickListener l) {
    if (numberOfTabs > 4) tabFiveOnClickListener = l;
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}
public void setTabsixOnClickListener(OnClickListener l) {
    if (numberOfTabs > 5) tabsixOnClickListener = l;
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}
public void setTabsevenOnClickListener(OnClickListener l) {
    if (numberOfTabs > 6) tabsevenOnClickListener = l;
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}
/***********************************************************************************************
 * Tab and Views getters, setters and customization for them
 **********************************************************************************************/
public View getTabLayout() {
    return parentLayout;
}

public void setTabColor(@ColorInt int backgroundColor) {
    PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(backgroundColor, PorterDuff.Mode.SRC_ATOP);
    Drawable image = ContextCompat.getDrawable(getContext(), R.drawable.background);
    Drawable image2 = ContextCompat.getDrawable(getContext(), R.drawable.background2);
    image.setColorFilter(porterDuffColorFilter);
    image2.setColorFilter(porterDuffColorFilter);

    backgroundImage.setImageDrawable(image);
    backgroundImage2.setImageDrawable(image2);
}

public FloatingActionButton getButton() {
    return actionButton;
}

public void setButtonColor(@ColorInt int backgroundColor) {
    actionButton.setBackgroundTintList(ColorStateList.valueOf(backgroundColor));
}


public View getTabOneView() {
    return tabOne.getCustomView();
}

public View getTabTwoView() {
    return tabTwo.getCustomView();
}

public View getTabThreeView() {
    return tabThree.getCustomView();
}

public View getTabFourView() {
    if (numberOfTabs > 3) return tabFour.getCustomView();
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public View getTabFiveView() {
    if (numberOfTabs > 4) return tabFive.getCustomView();
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public View getTabsixView() {
    if (numberOfTabs > 4) return tabsix.getCustomView();
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}
public View getTabsevenView() {
    if (numberOfTabs > 4) return tabseven.getCustomView();
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabOneView(View tabOneView) {
    tabOne.setCustomView(tabOneView);
}

public void setTabOneView(@LayoutRes int tabOneLayout) {
    tabOne.setCustomView(tabOneLayout);
}

public void setTabTwoView(View tabTwoView) {
    tabTwo.setCustomView(tabTwoView);
}

public void setTabTwoView(@LayoutRes int tabTwoLayout) {
    tabOne.setCustomView(tabTwoLayout);
}

public void setTabThreeView(View tabThreeView) {
    tabThree.setCustomView(tabThreeView);
}

public void setTabThreeView(@LayoutRes int tabThreeLayout) {
    tabThree.setCustomView(tabThreeLayout);
}

public void setTabFourView(View tabFourView) {
    if (numberOfTabs > 3) tabFour.setCustomView(tabFourView);
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabFourView(@LayoutRes int tabFourLayout) {
    if (numberOfTabs > 3) tabFour.setCustomView(tabFourLayout);
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabFiveView(View tabFiveView) {
    if (numberOfTabs > 4) tabFour.setCustomView(tabFiveView);
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabFiveView(@LayoutRes int tabFiveLayout) {
    if (numberOfTabs > 4) tabFour.setCustomView(tabFiveLayout);
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabsixView(View tabsixView) {
    if (numberOfTabs > 5) tabsix.setCustomView(tabsixView);
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}
public void setTabsixView(@LayoutRes int tabsixView) {
    if (numberOfTabs > 5) tabsix.setCustomView(tabsixView);
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabsevenView(View tabsevenLayout) {
    if (numberOfTabs > 6) tabseven.setCustomView(tabsevenLayout);
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}
public void setTabsevenView(@LayoutRes int tabsevenLayout) {
    if (numberOfTabs > 6) tabseven.setCustomView(tabsevenLayout);
    else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}



public void setTabOneIcon(@DrawableRes int tabOneIcon) {
    defaultTabOneButtonIcon = getContext().getResources().getDrawable(tabOneIcon);
    tabOneImageView.setImageResource(tabOneIcon);
}

public void setTabOneIcon(Drawable tabOneIcon) {
    defaultTabOneButtonIcon = tabOneIcon;
    tabOneImageView.setImageDrawable(tabOneIcon);
}

public void setTabTwoIcon(@DrawableRes int tabTwoIcon) {
    defaultTabTwoButtonIcon = getContext().getResources().getDrawable(tabTwoIcon);
    tabTwoImageView.setImageResource(tabTwoIcon);
}

public void setTabTwoIcon(Drawable tabTwoIcon) {
    defaultTabTwoButtonIcon = tabTwoIcon;
    tabTwoImageView.setImageDrawable(tabTwoIcon);
}

public void setTabThreeIcon(@DrawableRes int tabThreeIcon) {
    defaultTabThreeButtonIcon = getContext().getResources().getDrawable(tabThreeIcon);
    tabThreeImageView.setImageResource(tabThreeIcon);
}

public void setTabThreeIcon(Drawable tabThreeIcon) {
    defaultTabThreeButtonIcon = tabThreeIcon;
    tabThreeImageView.setImageDrawable(tabThreeIcon);
}

public void setTabFourIcon(@DrawableRes int tabFourIcon) {
    if (numberOfTabs > 3) {
        defaultTabFourButtonIcon = getContext().getResources().getDrawable(tabFourIcon);
        tabFourImageView.setImageResource(tabFourIcon);
    } else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabFourIcon(Drawable tabFourIcon) {
    if (numberOfTabs > 3) {
        defaultTabFourButtonIcon = tabFourIcon;
        tabFourImageView.setImageDrawable(tabFourIcon);
    } else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabFiveIcon(@DrawableRes int tabFiveIcon) {
    if (numberOfTabs > 4) {
        defaultTabFiveButtonIcon = getContext().getResources().getDrawable(tabFiveIcon);
        tabFiveImageView.setImageResource(tabFiveIcon);
    } else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabFiveIcon(Drawable tabFiveIcon) {
    if (numberOfTabs > 4) {
        defaultTabFiveButtonIcon = tabFiveIcon;
        tabFiveImageView.setImageDrawable(tabFiveIcon);
    } else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabsixIcon(@DrawableRes int tabsixIcon) {
    if (numberOfTabs > 5) {
        defaultTabsixButtonIcon = getContext().getResources().getDrawable(tabsixIcon);
        tabsixImageView.setImageResource(tabsixIcon);
    } else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabsixIcon(Drawable tabsixIcon) {
    if (numberOfTabs > 5) {
        defaultTabsixButtonIcon = tabsixIcon;
        tabsixImageView.setImageDrawable(tabsixIcon);
    } else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabsevenIcon(@DrawableRes int tabsevenIcon) {
    if (numberOfTabs > 6) {
        defaultTabsixButtonIcon = getContext().getResources().getDrawable(tabsevenIcon);
        tabsixImageView.setImageResource(tabsevenIcon);
    } else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

public void setTabsevenIcon(Drawable tabsevenIcon) {
    if (numberOfTabs > 6) {
        defaultTabsevenButtonIcon= tabsevenIcon;
        tabsevenImageView.setImageDrawable(tabsevenIcon);
    } else throw new IllegalArgumentException("You have " + numberOfTabs + " tabs.");
}

/***********************************************************************************************
 * Customization for the TextViews when you have three tabs
 **********************************************************************************************/
public void setTabOneText(String tabOneText) {
    if (!iconOnly) tabOneTextView.setText(tabOneText);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabOneText(@StringRes int tabOneText) {
    if (!iconOnly) tabOneTextView.setText(tabOneText);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabTwoText(String tabTwoText) {
    if (!iconOnly) tabTwoTextView.setText(tabTwoText);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabTwoText(@StringRes int tabTwoText) {
    if (!iconOnly) tabTwoTextView.setText(tabTwoText);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabThreeText(String tabThreeText) {
    if (!iconOnly) tabThreeTextView.setText(tabThreeText);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabThreeText(@StringRes int tabThreeText) {
    if (!iconOnly) tabThreeTextView.setText(tabThreeText);
    else throw new IllegalArgumentException("You selected icons only.");
}


public void setTabOneTextColor(@ColorInt int tabOneTextColor) {
    if (!iconOnly) tabOneTextView.setTextColor(tabOneTextColor);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabOneTextColor(ColorStateList colorStateList) {
    if (!iconOnly) tabOneTextView.setTextColor(colorStateList);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabTwoTextColor(@ColorInt int tabTwoTextColor) {
    if (!iconOnly) tabTwoTextView.setTextColor(tabTwoTextColor);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabTwoTextColor(ColorStateList colorStateList) {
    if (!iconOnly) tabTwoTextView.setTextColor(colorStateList);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabThreeTextColor(@ColorInt int tabThreeTextColor) {
    if (!iconOnly) tabThreeTextView.setTextColor(tabThreeTextColor);
    else throw new IllegalArgumentException("You selected icons only.");
}

public void setTabThreeTextColor(ColorStateList colorStateList) {
    if (!iconOnly) tabThreeTextView.setTextColor(colorStateList);
    else throw new IllegalArgumentException("You selected icons only.");
}


static class SavedState extends BaseSavedState {
    int currentPosition;

    SavedState(Parcelable superState) {
        super(superState);
    }

    private SavedState(Parcel in) {
        super(in);
        this.currentPosition = in.readInt();
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
        super.writeToParcel(out, flags);
        out.writeInt(this.currentPosition);
    }

    public static final Parcelable.Creator<SavedState> CREATOR =
            new Parcelable.Creator<SavedState>() {
                public SavedState createFromParcel(Parcel in) {
                    return new SavedState(in);
                }

                public SavedState[] newArray(int size) {
                    return new SavedState[size];
                }
            };
}

}

`

Submit a pull request, maybe @long1eu will merge it.