Android:app:srcCompat =“”和android:src =“”有什么区别?

每当我创build一个ImageView的图标添加使用Android Studio的vector资产,我在线app:srcCompat="@drawable/ic_play"错误app:srcCompat="@drawable/ic_play"

而当我更改app:srcCompat=""android:src=""错误消失,但图标看起来像素化。

主要区别是什么?

 app:srcCompat="@drawable/ic_play" 

 android:src="@drawable/ic_play" 

应用:srcCompat

是将vector绘图集成到您的应用程序中最安全的方法。 vector绘图允许您使用XML中定义的单个vectorgraphics来replace多个PNG资源。 以前只限于棒棒糖和更高级的设备

注意

Android支持库23.3.0开始支持vector绘图只能通过app:srcCompat加载。

你需要添加vectorDrawables.useSupportLibrary = true到你的build.gradle文件

  // Gradle Plugin 2.0+ android { defaultConfig { vectorDrawables.useSupportLibrary = true } } 

机器人:SRC

设置一个drawable作为这个ImageView的内容。它将以原始大小显示。 没有自动缩放。

vector和animationvector只在最近版本的框架中被支持。 srcCompat可以与兼容库一起使用,但是只能在支持库中的特定视图中使用。 注意,应用程序:是用来代替android :. 这意味着它不是框架的一部分,而是你的应用程序定义的一个参数。

使用:

应用程式:srcCompat = “@绘制/ backImage”

因为它的srcCompat属性实际上是在AppCompat库中定义的。 重要的是你将需要为此添加适当的命名空间。

 xmlns:app="http://schemas.android.com/apk/res-auto" 

注意

你得到它似乎只是一个可以忽略的皮棉错误。 我曾尝试过,并有相同的错误,但它正常工作。

你可以使用tools:ignore="MissingPrefix"来避免临时看到这个错误。

我希望这有帮助。

当将AppCompatImageView (或ImageButtonFloatingActionButton等子类) 一起使用时您将能够使用新的app:srcCompat属性在旧版本的平台上引用vector绘图(以及其他任何可用于android:src drawable )

android.support.v7.appcompat.R.attr.srcCompat :

srcCompat

设置一个drawable作为这个ImageView的内容。 允许在旧版本的平台上运行时使用vector绘制。

可以以"@[+][package:]type/name"格式或以"?[package:]type/name"forms的另一个资源的引用。


当使用app:srcCompat时,不要忘记插入xmlns:app="http://schemas.android.com/apk/res-auto"

 app:srcCompat="some_resource" 

是指支持库中的AppCompatActivity src

 android:src="some_resource" 

指的是简单的活动。

Android 5.0(API级别21)及更高版本提供了vector绘图支持,以便支持旧版本应用程序中的vector绘图:已添加srcCompat

当使用AppCompat与ImageView(或ImageButton和FloatingActionButton等子类)时,您将可以使用新的应用程序:srcCompat属性来引用vector绘图(以及任何其他可绘制的可用于android:src)在运行时重新绘制drawable,你可以像以前一样使用setImageResource()方法 – 在那里没有改变。 使用AppCompat和应用程序:srcCompat是将vector绘图集成到您的应用程序的最简单的方法。 你会发现在应用程序之外直接引用vector绘图:srcCompat在Lollipop之前将会失败。