【问题标题】:Single vector resource multiple tints单一矢量资源多种色调
【发布时间】:2018-11-07 21:36:51
【问题描述】:

我想用矢量版本替换我项目中的所有 .PNG 资源(图标)。 为了尽可能高效,我想避免由于不同状态(例如同一图标的“活动”和“非活动”版本)而导致图像重复。

以前我通过为每个版本使用单独的 PNG 文件来做到这一点:一个不透明的“活动”和稍微透明的“非活动”。

所以问题是,是否可以创建一些引用单个矢量(最好是)图像但对其应用不同颜色/色调的 XML?或者至少不同的 alpha 值就足够了。

附:如果重要的话,我的 minSDK 版本是 19。

UPDATE_01: 我想我需要更详细地解释一下。 矢量资源按预期工作(所有准备工作都已为 compat lib 根据需要绘制矢量做好了准备)。

主要问题是在单独的 XML 中使用一个单一的矢量图标和多个具有不同颜色/alpha 的引用。并在需要的地方(工具栏、按钮、状态等)使用这些 XML。

UPDATE_02: 也许和例子会更好。

我有一个“主页”图标的矢量可绘制对象,如下所示:

<vector
    android:height="24dp"
    android:viewportHeight="792.0"
    android:viewportWidth="792.0"
    android:width="24dp"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <path
        android:fillColor="#FF000000"
        android:pathData="..."/>
</vector>

我想要的是使用相同的 XML 矢量drawable,但“活动”和“非活动”状态具有不同的色调,例如,在页面适配器的选项卡中。

我现在要做的是复制这个 XML 并更改它的“android:fillColor”值。

在所有使用它的地方改变它(在代码中)是一种方法,但从我的角度来看不是很好。也许还有另一种方式?像这样的东西(伪):

<image-reference
    android:srcDrawable="@drawable/home_icon"
    android:tint="@color/activeHomeIcon" />

然后在任何地方都使用这个“home_icon_ref.xml”作为可绘制源。

希望这一次能让我的问题更清楚。

【问题讨论】:

  • DrawableCompat#setTintList
  • API static { AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); }
  • 我想我应该添加更多关于主题的细节。查看我的更新。
  • 对不起,尽管您更新了我仍然没有看到您的主要问题...
  • 我在我的问题中添加了一个示例。

标签: android android-resources


【解决方案1】:

不确定这是否正是您所需要的(这已经快 2 年了),但您可以在 ImageView 的 xml 中使用 android:tint

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:src="@drawable/vector_drawable"
    android:tint="@android:color/black"
    android:contentDescription="@string/description"
/>

我目前正在使用minSdkVersion 21,但根据this,它似乎在早期版本中工作。
您还可以将style&lt;item name="android:tint"&gt;@android:color/black&lt;/item&gt; 一起使用。

【讨论】:

    【解决方案2】:

    您可以在 Java 代码中以编程方式进行修改,而不是在单独的 XML 资源中使用。Follow this SO post

    【讨论】:

    • 如果我理解正确,我将不得不在代码中添加变异到在所有片段和活动中使用此图像的每个视图。不是很方便。
    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    相关资源
    最近更新 更多