设置图标颜色重复的特定实例

时间:2019-01-10 10:58:18

标签: android android-studio android-layout android-tablayout

在继续阅读之前,我知道可以更改特定标签图标的颜色

private void BtnToDatabase_Click(object sender, RoutedEventArgs e)
{
    bool dupe = false;
    foreach (File file in lbfiles.Items.OfType<File>())
    {
        string name = file.Name;
        string path = file.Path;
                ...
    }
}

关于如何具体执行此操作,有很多重复的答案-但是它们并不能回答我的问题。

我有一个工具栏,一个人可能在其中有两次sam图标(例如,他们可以查看两个或多个雇员资料),问题是,通过获取图标并设置颜色,它可以更改所有图标,而不是所选图标-大概是因为获取图标只是通过id而不是特定实例来选择图标

enter image description here

如果我选择带有其他图标(例如更多)的标签,则它们都会重置。

是否有办法在更改颜色时仅将图标的特定实例作为目标,而无需创建新的可绘制图标?

1 个答案:

答案 0 :(得分:1)

从代码中看不出来,但是图标下面的位图是共享的。有关共享位图,请参见`BitmapDrawable#mutate()

  

可变BitmapDrawable仍与来自同一资源的任何其他Drawable共享其Bitmap。

但是我们可以通过在图标上调用mutate()来分离图标的颜色。

这是一个简短的方法,它显示了如何将一个图标与依赖同一可绘制资源的两个图标分开:

    private void setupTabIcons() {
        int sharedIcon = R.drawable.ic_tab_favourite;

        Drawable inactiveIcon = getResources().getDrawable(sharedIcon);

        // Separate out the first icon so changes don't propagate to other icons.
        inactiveIcon.mutate();
        inactiveIcon.setColorFilter(ContextCompat.getColor(getApplicationContext(), R.color.colorInactive),
                                    android.graphics.PorterDuff.Mode.MULTIPLY);
        // We could also do the following for Lollipop+:
//         inactiveIcon.setTint(getResources().getColor(R.color.colorInactive));
        tabLayout.getTabAt(0).setIcon(inactiveIcon);
        tabLayout.getTabAt(1).setIcon(sharedIcon);
        tabLayout.getTabAt(2).setIcon(sharedIcon);
    }

enter image description here