在继续阅读之前,我知道可以更改特定标签图标的颜色
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而不是特定实例来选择图标
如果我选择带有其他图标(例如更多)的标签,则它们都会重置。
是否有办法在更改颜色时仅将图标的特定实例作为目标,而无需创建新的可绘制图标?
答案 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);
}