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
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:src和srcCompat接受向量,只能src从视图中检索为可绘制的用于编程的着色.使用getDrawable可以在代码中引用向量,并且可以对它们进行着色.
Pre-Lollipop:srcCompat只能接受向量,不能从视图中以编程方式检索. setImageResource可以接受矢量,但仅限于vectorDrawables.useSupportLibrary = false,并且着色不起作用.类似地,代码中的引用向量是不可能的,除非vectorDrawables.useSupportLibrary = false并且着色不起作用. …
android ×2