假如你的图标,需求需要的颜色多变的情况下,可以考虑原色调渲染这种方法。

// 原色调渲染
public Bitmap genRenderingIcon(@DrawableRes int origin, int primaryColor) {
if (origin == -1) {
return null;
}
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = false;
Bitmap bitmapOrigin = BitmapFactory.decodeResource(getResources(), origin, options);
Bitmap iconBitmap = bitmapOrigin.copy(Bitmap.Config.ARGB_8888, true);
Canvas canvas = new Canvas(iconBitmap);
canvas.drawColor(primaryColor & 0x00ffffff | (isLight(primaryColor) ? 0xff000000 : 0x8a000000), PorterDuff.Mode.SRC_IN);
return iconBitmap;
}

以上是android的原色调渲染主要的代码;

接下来是我调用的一个例子:
@Override
public void onTabUnselected(TabLayout.Tab tab) {
tabLayout.getTabAt(tab.getPosition()).setIcon(new BitmapDrawable(getResources(), genRenderingIcon((int) unpickIcons.get(tab.getPosition()), Color.rgb(12, 64, 83))));
}

在onCreate方法里面:(我这里主要是改变上tab的图标)

final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.addTab(tabLayout.newTab().setIcon(R.drawable.home_picked));
tabLayout.addTab(tabLayout.newTab().setIcon(new BitmapDrawable(getResources(), genRenderingIcon(R.drawable.ic_format_list_bulleted_black_48dp, Color.rgb(12, 64, 83)))));
tabLayout.addTab(tabLayout.newTab().setIcon(new BitmapDrawable(getResources(), genRenderingIcon(R.drawable.ic_face_black_48dp, Color.rgb(12, 64, 83)))));
大概就是这样子的用法,具体的引用可根据实际项目而定。