每当我使用 Android Studio 的矢量资产创建添加了图标的 ImageView 时,我都会在 app:srcCompat="@drawable/ic_play"行得到一个错误
app:srcCompat="@drawable/ic_play"
当我用 android:src改变 app:srcCompat时,错误消失了,但是图标看起来像素化了。
android:src
app:srcCompat
两者之间的主要区别是什么
还有
android:src="@drawable/ic_play"
矢量和动画矢量只在框架的最新版本中得到支持。SrcCompat 可以与兼容性库一起使用以使它们工作,但是这只适用于支持库中的某些视图。注意,使用 app: 代替 android: 。这意味着它不是框架的一部分,而是应用程序定义的一个参数。
app:srcCompat="some_resource"
是指它是 AppCompatActivity src,它在支持库中,而
android:src="some_resource"
指的是简单的活动。
Android 5.0(API 级别21)及更高版本提供了矢量绘制支持,以支持旧版本应用程序中的矢量绘制: srcCompat 被添加
应用程序: srcCompat
是将 一个 href = “ https://developer.android.com/reference/android/Graphable/VectorDrawable.html”rel = “ noReferrer”> Vector Drawables 集成到应用程序中的最简单的方法。矢量绘图允许您用一个用 XML 定义的矢量图形替换多个 png 资产。虽然以前仅限于棒棒糖和更高的设备
注意
从 安卓支持库23.3开始, 支持向量可绘制部分 强 > 只能通过 app:srcCompat加载。
您需要将 UseSupportLibrary = true添加到 build.gradle文件中
build.gradle
// Gradle Plugin 2.0+ android { defaultConfig { vectorDrawables.useSupportLibrary = true } }
机器人: src
设置一个可绘制的内容作为此 ImageView.will 在 它的原始尺寸。没有自动缩放。
用途:
app:srcCompat="@drawable/backImage"
SrcCompat 属性实际上是在 AppCompat 库中定义的。 重要提示: 您需要为此添加适当的名称空间。
xmlns:app="http://schemas.android.com/apk/res-auto"
您得到的似乎只是一个可以忽略的 lint 错误。我已经尝试并得到相同的错误,但它是正确的工作。
可以使用 tools:ignore="MissingPrefix"暂时避免看到此错误。
tools:ignore="MissingPrefix"
希望这个能帮上忙。
如果你在 build.gradle 文件中使用没有 vectorDrawables.useSupportLibrary = true的 android:src="@drawable/some_vector",并且你的应用程序有矢量图像(矢量可绘制) ,那么在构建 APK文件的同时 Android gradle 插件会生成大量 * 。从每个矢量绘制的不同屏幕(hdpi,xhdpi...)的 png 文件(仅适用于 API = < 19)。结果—— APK的大小更大。
vectorDrawables.useSupportLibrary = true
android:src="@drawable/some_vector"
对 vectorDrawables.useSupportLibrary = true机器人使用 app:srcCompat="@drawable/some_vector"时,使用矢量绘制文件而不生成 *.png文件。
app:srcCompat="@drawable/some_vector"
*.png
您可以使用 Android Studio apk 分析器工具检查这一点。
我认为这是最主要的区别。