App: srcCompat 和 Android: src 在 Android 布局中的区别

每当我使用 Android Studio 的矢量资产创建添加了图标的 ImageView 时,我都会在 app:srcCompat="@drawable/ic_play"行得到一个错误

当我用 android:src改变 app:srcCompat时,错误消失了,但是图标看起来像素化了。

两者之间的主要区别是什么

app:srcCompat="@drawable/ic_play"

还有

android:src="@drawable/ic_play"
111271 次浏览

矢量和动画矢量只在框架的最新版本中得到支持。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文件中

    // 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"暂时避免看到此错误。

希望这个能帮上忙。

如果你在 build.gradle 文件中使用没有 vectorDrawables.useSupportLibrary = trueandroid:src="@drawable/some_vector",并且你的应用程序有矢量图像(矢量可绘制) ,那么在构建 APK文件的同时 Android gradle 插件会生成大量 * 。从每个矢量绘制的不同屏幕(hdpi,xhdpi...)的 png 文件(仅适用于 API = < 19)。结果—— APK的大小更大。

vectorDrawables.useSupportLibrary = true机器人使用 app:srcCompat="@drawable/some_vector"时,使用矢量绘制文件而不生成 *.png文件。

您可以使用 Android Studio apk 分析器工具检查这一点。

我认为这是最主要的区别。