Skip to content

Instantly share code, notes, and snippets.

@codebreaker
Forked from mikovali/TabLayoutHelper.java
Last active March 23, 2016 05:50
Show Gist options
  • Save codebreaker/eb559239063315e9f195 to your computer and use it in GitHub Desktop.
Save codebreaker/eb559239063315e9f195 to your computer and use it in GitHub Desktop.
Tinted icons for TabLayout in Android design support library with ViewPager
package io.github.mikovali.android;
import android.content.res.ColorStateList;
import android.graphics.drawable.Drawable;
import android.support.annotation.DrawableRes;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
public class TabLayoutHelper {
public interface IconPagerAdapter {
@DrawableRes
int getPageTitleIconRes(int position);
@Nullable
Drawable getPageTitleIconDrawable(int position);
}
public static void setupWithViewPager(TabLayout tabLayout, ViewPager viewPager) {
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout));
setTabsFromPagerAdapter(tabLayout, viewPager);
tabLayout.setOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
}
public static void setTabsFromPagerAdapter(TabLayout tabLayout, ViewPager viewPager) {
PagerAdapter pagerAdapter = viewPager.getAdapter();
if (!(pagerAdapter instanceof IconPagerAdapter)) {
tabLayout.setupWithViewPager(viewPager);
return;
}
final ColorStateList tabColors = tabLayout.getTabTextColors();
for (int i = 0; i < pagerAdapter.getCount(); i++) {
Drawable icon = ((IconPagerAdapter) pagerAdapter).getPageTitleIconDrawable(i);
if (icon == null) {
final int iconRes = ((IconPagerAdapter) pagerAdapter).getPageTitleIconRes(i);
icon = ResourcesCompat.getDrawable(tabLayout.getResources(), iconRes, null);
}
icon = DrawableCompat.wrap(icon);
DrawableCompat.setTintList(icon, tabColors);
tabLayout.addTab(tabLayout.newTab()
.setIcon(icon)
.setContentDescription(pagerAdapter.getPageTitle(i)));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment