Vector drawable已经添加到支持库中不久以前,从那时起API中有很多变化:Gradle标记,初始化块,选择器,自定义XML属性等。问题是 - 如何正确使用它现在(支持lib v25)在这些情况下:
XML并以编程方式。
答案 0 :(得分:31)
将最新的支持库添加到您应用的build.gradle
依赖项:
compile 'com.android.support:appcompat-v7:26.0.2'
并在同一文件中添加以下行:
android {
...
defaultConfig {
...
vectorDrawables.useSupportLibrary = true
}
...
}
通过Vector Asset Studio导入矢量图像。
就是这样,你准备好了!
<强> XML 强>
使用app:srcCompat
属性代替android:src
:
<ImageView
...
app:srcCompat="@drawable/your_vector"
... />
<强>编程强>
直接来自资源ID:
imageView.setImageResource(R.drawable.your_drawable);
设置为Drawable
对象(例如用于着色):
Drawable vectorDrawable
= AppCompatResources.getDrawable(context, R.drawable.your_vector);
imageView.setImageDrawable(vectorDrawable);
如果你想设置色调:
DrawableCompat.setTint
(vectorDrawable, ContextCompat.getColor(context, R.color.your_color));
<强> XML 强>
没有简单的解决方案:XML属性android:drawableTop(Bottom etc)
无法处理前Lollipop上的矢量图像。一个解决方案是add initializer block to activity and wrap vector into another XML drawable。第二 - to define a custom TextView。
<强>编程强>
直接设置资源不起作用,您必须使用Drawable
对象。以与ImageView
相同的方式获取它,并使用适当的方法设置它:
textView.setCompoundDrawablesWithIntrinsicBounds(vectorDrawable, null, null, null);
没有什么特别的:
<item
...
android:icon="@drawable/your_vector"
... />
menuItem.setIcon(R.drawable.your_vector);
这是impossible,您必须使用PNG :(
答案 1 :(得分:-1)
您需要将vectorDrawables.useSupportLibrary = true添加到build.gradle文件中:
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
您会注意到此新属性仅存在于Gradle插件的2.0版本中。如果您使用的是Gradle 1.5,则可以使用:
// Gradle Plugin 1.5
android {
defaultConfig {
generatedDensities = []
}
// This is handled for you by the 2.0+ Gradle Plugin
aaptOptions {
additionalParameters "--no-version-vectors"
}
}
您需要将srcCompat添加到ImageView:
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:srcCompat="@drawable/ic_add" />