相关疑难解决方法(0)

在Android Studio中更改矢量资产的填充颜色

Android Studio现在支持21岁以上的矢量资产,并将在编译时为较低版本生成png.我有一个矢量资源(来自材料图标)我想要更改填充颜色.这适用于21+,但生成的png不会改变颜色.有没有办法做到这一点?

<vector android:height="48dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/primary" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
Run Code Online (Sandbox Code Playgroud)

android vector-graphics android-studio android-vectordrawable

148
推荐指数
7
解决办法
14万
查看次数

以编程方式着色支持向量

Android Studio 2.1版,gradle版本2.1.0,如果你发现任何曲解,请纠正我:)

我对支持库23.3.0中的支持向量感到困惑.具体来说,我想要的是以编程方式设置图像按钮,其src被定义为矢量drawable.据我所知,这在前棒棒糖上是不可能的.

我已经阅读了几篇关于这些变化的相关帖子: 23.2.0公告和变更:

从Android支持库23.3.0开始,支持向量drawable只能通过app:srcCompat或setImageResource()加载.

是否以上意味着矢量个XML只能通过srcCompat或setImageResource()被用于预棒棒糖,因此不能动态着色

这是我的基本图像按钮:

<ImageButton
    android:id="@+id/nav_header_exit_community_button"
    android:layout_width="48dp"
    android:layout_height="48dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:background="@null"/>
Run Code Online (Sandbox Code Playgroud)

仅适用于棒棒糖及以上:

    Drawable bg = ContextCompat.getDrawable(a, R.drawable.ic_exit_to_app_24dp);
    DrawableCompat.setTint(bg, headerTitleColor);
    exitButton.setImageDrawable(bg);
Run Code Online (Sandbox Code Playgroud)

试图这个前棒棒糖投掷: android.content.res.Resources$NotFoundException: File res/drawable/ic_exit_to_app_24dp.xml from drawable resource ID #0x7f0200bf

也适用于棒棒糖及以上

    Drawable bg = ContextCompat.getDrawable(a, R.drawable.ic_exit_to_app_24dp);
    DrawableCompat.setTint(bg, headerTitleColor);
    exitButton.setImageResource(R.drawable.ic_exit_to_app_24dp);
Run Code Online (Sandbox Code Playgroud)

这会给前Lollipop带来同样的错误.

但是,如果我删除vectorDrawables.useSupportLibrary = true的指出,由伊恩·湖这里,与具有生成工具自动生成预棒棒糖设备png格式,的意图的PNG图像不会在预棒棒糖着色,所以我又回到了起点.

我也试图通过指定载体srcCompat和编程检索,但我不认为我已经能够做到这一点,尽管它适用于后棒棒糖如果使用指定的载体src来代替.

所以23.3.0的情况似乎是:

  • Post-Lollipop:srcsrcCompat接受向量,只能src从视图中检索为可绘制的用于编程的着色.使用getDrawable可以在代码中引用向量,并且可以对它们进行着色.

  • Pre-Lollipop:srcCompat只能接受向量,不能从视图中以编程方式检索. setImageResource可以接受矢量,但仅限于vectorDrawables.useSupportLibrary = false,并且着色不起作用.类似地,代码中的引用向量是不可能的,除非vectorDrawables.useSupportLibrary = false并且着色不起作用. …

android android-appcompat android-vectordrawable

17
推荐指数
2
解决办法
6627
查看次数