Android 上的工具栏图标着色

49

我注意到使用AppCompat主题时,我的样式中的默认工具栏图标会被属性colorControlNormal着色。

<style name="MyTheme" parent="Theme.AppCompat">
    <item name="colorControlNormal">@color/yellow</item>
</style>

在这里输入图片描述

如上所示,但不是所有图标都会发生这种情况。我提供了“加号”符号,这个符号我从官方图标中获取的,但它没有被着色(我使用了png的“白色”版本)。根据我从这个问题了解到的,系统只为仅具有 alpha 通道的图标进行着色。这是真的吗?

如果是这样的话:是否有一个地方可以找到官方的 alpha 设计的 material icons?如果不是 - 如果 Toolbar 图标需要是 alpha-only 才能着色 - 那 Google 是如何希望我们在 Toolbar 中使用提供的图标呢?

在 SDK 的某个地方,我找到了一些以 _alpha.png 结尾的图标,并且它们着色得很好。然而,我需要完整的 material icons 集合,在官方资源中我只能找到白色灰色600黑色的图标。

在运行时应用 ColorFilter 将会有些麻烦,而我的实际 Toolbar - 有些图标着色,有些图标没有着色 - 看起来相当糟糕。


2
AppCompat 只会给自己的图标着色。目前,您需要手动为与 AppCompat 分开提供的任何图标进行着色。 - alanv
另外,链接的问题仅适用于通知,而不是一般的着色。 - alanv
1
请参考这篇StackO-Post进行详细解释。 - reVerse
看来我应该再搜索一会儿。 我很乐意接受你的答案@alanv,或者让我们将其标记为重复项。 出于好奇,您是否说“目前”是因为您知道即将推出修复程序,还是仅仅是你的想象? - natario
这是我们想做的事情,但我不能做出任何承诺。 - alanv
12个回答

0
@NonNull
public static Drawable setTintDrawable(@NonNull Drawable drawable, @ColorInt int color) {
   drawable.clearColorFilter();
   drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN);
   drawable.invalidateSelf();
   Drawable wrapDrawable = DrawableCompat.wrap(drawable).mutate();
   DrawableCompat.setTint(wrapDrawable, color);
   return wrapDrawable;
 }

以这种方式调用:
MenuItem location = menu.findItem(R.id.action_location);
DrawableUtils.setTintDrawable(location.getIcon(), Color.WHITE);

enter image description here


0

基本上,当您设置菜单时,三点图标会使用AppTheme中的android:textColorSecondary颜色,而默认情况下为黑色。

因此,如果您在项目中没有使用textColorSecondary,则可以简单地添加以下行:

<item name="android:textColorSecondary">@color/White</item>

添加后可能会看起来像这样。

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <!-- Customise your theme here. -->

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:textColorSecondary">@color/White</item>
</style>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接