-
-
Save codebreaker/eb559239063315e9f195 to your computer and use it in GitHub Desktop.
Tinted icons for TabLayout in Android design support library with ViewPager
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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