每当我使用Android Studio的矢量资源创建带有图标的ImageView时,我在第app:srcCompat="@drawable/ic_play"
行
当我使用app:srcCompat
更改android:src
时,错误消失但图标看起来像素化。
之间的主要区别是什么?
app:srcCompat="@drawable/ic_play"
和
android:src="@drawable/ic_play"
答案 0 :(得分:104)
<强> app:srcCompat 强>
是将 vector drawables 集成到app中最简单的方法.Vector drawables允许您使用XML定义的单个矢量图形替换多个png资源。虽然以前仅限于棒棒糖和更高的设备
注意
从 Android Support Library 23.3.0 开始, 支持向量drawable 只能通过 app:srcCompat
加载强>。
您需要将 vectorDrawables.useSupportLibrary = true 添加到build.gradle
文件
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
<强> android:src 强>
将drawable设置为此ImageView的内容。它将显示在其中 原来的大小。没有自动缩放。
答案 1 :(得分:10)
如果您在build.gradle文件中使用的android:src="@drawable/some_vector"
中没有vectorDrawables.useSupportLibrary = true
,并且您的应用具有矢量图像(可绘制矢量),则在构建 apk 文件时,Android gradle插件从每个矢量可绘制对象(仅适用于API = <19)为不同的屏幕(hdpi,xhdpi ...)生成许多* .png文件。结果- apk 的大小更大。
将app:srcCompat="@drawable/some_vector"
与vectorDrawables.useSupportLibrary = true
一起使用时,android使用矢量可绘制文件而不生成*.png
文件。
您可以使用Android Studio APK分析器工具进行检查。只需构建包含和不包含vectorDrawables.useSupportLibrary = true
的APK。
我认为这是主要区别。
答案 2 :(得分:7)
使用:强>
app:srcCompat="@drawable/backImage"
srcCompat属性实际上是在AppCompat库中定义的。 重要提示:您需要为此添加适当的命名空间。
xmlns:app="http://schemas.android.com/apk/res-auto"
注意强>
你得到的似乎只是一个可以忽略的棉绒错误。我试过并得到了同样的错误,但它工作正常。
您可以暂时使用tools:ignore="MissingPrefix"
来避免看到此错误。
我希望这会有所帮助。
答案 3 :(得分:3)
仅在最新版本的框架中支持向量和动画向量。 srcCompat可以与兼容库一起使用以使它们起作用,但这仅适用于支持库中的某些视图。请注意,app:用于代替android:。这意味着它不是框架的一部分,而是由您的应用程序定义的参数。
答案 4 :(得分:3)
将AppCompat
与ImageView
(或ImageButton
和FloatingActionButton
等子类)一起使用时,您将可以使用新的{{1} }属性引用旧版平台上的矢量drawable(以及app:srcCompat
可用的任何其他drawable 。
android.support.v7.appcompat.R.attr.srcCompat:
srcCompat
将drawable设置为此ImageView的内容。允许在较旧版本的平台上运行时使用矢量drawable。
可以是
android:src
形式的其他资源的引用,也可以是"@[+][package:]type/name"
形式的主题属性。
使用"?[package:]type/name"
时,请不要忘记插入xmlns:app="http://schemas.android.com/apk/res-auto"
。
答案 5 :(得分:2)
app:srcCompat="some_resource"
是指
时支持库中的AppCompatActivity srcandroid:src="some_resource"
指的是简单的活动。
答案 6 :(得分:2)
将AppCompat
与ImageView
(或ImageButton
和FloatingActionButton
等子类)一起使用时,您将能够使用新的app:srcCompat
属性参考向量drawables(以及android:src
可用的任何其他drawable)。如果你在运行时更改drawables,你将能够使用与以前相同的setImageResource()
方法(没有更改)。
使用AppCompat
和app:srcCompat
是将矢量绘图集成到您的应用中最简单的方法。您会发现直接引用app:srcCompat
之外的矢量绘图将在 Lollipop 之前失败。
答案 7 :(得分:0)
Android 5.0(API级别21)及更高版本提供矢量绘图支持,以便在旧版本app中支持矢量绘图:srcCompat已添加