最新更新 - 2019年6月
自原回答以来,支持库已经有了一些改变。现在,即使是Gradle的Android插件也能在构建时自动生成PNG。因此,以下是两种新方法,这些方法现在应该有效。您可以在此处找到更多信息。
PNG生成
Gradle可以在构建时自动从您的资源中创建PNG图像。但是,在此方法中,并不支持所有xml元素。这种解决方案很方便,因为您无需更改代码或build.gradle中的任何内容。只需确保您使用Android Plugin 1.5.0或更高版本和Android Studio 2.2或更高版本。
我在我的应用程序中使用此解决方案,并且运行良好。不需要任何其他build.gradle标志。不需要任何技巧。如果您转到/build/generated/res/pngs/...,您可以看到生成的所有PNG。
因此,如果您有一些简单的图标(因为并不支持所有xml元素),则此解决方案可能适合您。只需更新您的Android Studio和Gradle的Android插件即可。
支持库
可能,这是适合您的解决方案。如果您来到这里,说明您的Android Studio没有自动生成PNG。因此,您的应用程序正在崩溃。
或者,您不希望Android Studio自动生成任何PNG。
与“自动PNG生成”不同,该解决方案支持所有xml标记。因此,您可以完全支持矢量图形。
首先,您必须更新build.gradle以支持它:
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
implementation 'com.android.support:appcompat-v7:23.2.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
}
在加载VectorDrawables
时,请使用app:srcCompat
而不是android:src
。不要忘记这一点。
对于TextView
,如果你正在使用支持库的androidx
版本,可以使用app:drawableLeftCompat
(或right、top、bottom)代替app:drawableLeft
对于CheckBox
/RadioButton
,请使用app:buttonCompat
代替android:button
。
如果您没有使用支持库的androidx
版本,并且您的minSdkVersion
为17
或更高,或者使用了一个按钮,则可以尝试通过编程方式进行设置。
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
更新 - 2016年7月
在Android支持库23.4.0中重新启用了VectorDrawable。
对于AppCompat用户,我们添加了一个选择加入的API来从资源中重新启用支持矢量图形(与23.2中的行为相同),通过AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) - 请记住,这仍然可能导致内存使用问题和更新配置实例的问题,因此默认情况下它是禁用的。
也许,build.gradle
设置现在已过时,您只需要在适当的活动中启用它(但需要测试)。
现在,要启用它,您必须执行以下操作:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
原始回答-2016年4月
我认为这是由于最新库版本23.3.0中禁用了支持向量。
根据这个文章:
对于 AppCompat 用户,由于在版本 23.2.0/23.2.1 中发现的实现问题,我们决定删除使用资源中矢量可绘制对象在早期 Lollipop 设备上的功能 (ISSUE 205236)。 使用 app:srcCompat 和 setImageResource() 仍然有效。
如果您访问问题ISSUE 205236 ,似乎他们将在未来启用它,但内存问题不会很快被修复:
在下一个版本中,我添加了一项选择性 API,您可以重新启用已删除的 VectorDrawable 支持。尽管如此,它具有与以前相同的注意事项(内存使用和配置更新问题)。
我也遇到了类似的问题。因此,在我的情况下,我把所有使用资源中向量可绘制图标恢复为 PNG 图像(因为即使他们提供重新启用它的选项,内存问题仍将持续发生)。
我不确定这是否是最佳选择,但在我看来,它可以解决所有崩溃问题。