Android的布局XML中app:srcCompat和android:src之间的区别

问题描述 投票:102回答:8

每当我使用Android Studio Vector Assets创建带有图标的ImageView时,我在qazxsw poi行收到错误

当我用app:srcCompat="@drawable/ic_play"更改app:srcCompat时,错误消失但图标看起来像素化。

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

android:src

app:srcCompat="@drawable/ic_play"
android android-imageview layout-xml
8个回答
101
投票

android:src="@drawable/ic_play"

是将app:srcCompat集成到app中最简单的方法.Vector drawables允许您使用XML定义的单个矢量图形替换多个png资源。虽然以前仅限于棒棒糖和更高的设备

注意

vector drawables开始,支持向量drawable只能通过Android Support Library 23.3.0加载。

你需要将vectorDrawables.useSupportLibrary = true添加到你的app:srcCompat文件中

build.gradle

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

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


8
投票

如果你在build.gradle文件中使用没有android:srcandroid:src="@drawable/some_vector"并且你的应用程序有矢量图像(矢量drawable),那么在构建vectorDrawables.useSupportLibrary = true文件时,android gradle插件会为不同的屏幕生成大量的apk文件(hdpi,xhdpi ...)你的矢量drawable。结果 - 更大的*.png

当使用apkapp:srcCompat="@drawable/some_vector" android时使用矢量drawable文件而不生成vectorDrawables.useSupportLibrary = true文件。

您可以使用Android Studio apk分析工具进行检查。只需使用和不使用*.png构建apk。

我认为这是主要的区别。


6
投票

使用:

vectorDrawables.useSupportLibrary = true

srcCompat属性实际上是在AppCompat库中定义的。重要提示:您需要为此添加适当的命名空间。

app:srcCompat="@drawable/backImage"

注意

你得到的似乎只是一个可以忽略的棉绒错误。我试过并得到了同样的错误,但它工作正常。

你可以暂时使用xmlns:app="http://schemas.android.com/apk/res-auto" 来避免看到这个错误。

我希望这有帮助。


3
投票

仅在框架的最新版本中支持向量和动画向量。 srcCompat可以与兼容库一起使用以使它们起作用,但这仅适用于支持库中的某些视图。请注意,app:用于代替android:。这意味着它不是框架的一部分,而是由您的应用程序定义的参数。


3
投票

当使用tools:ignore="MissingPrefix"AppCompat(或ImageViewImageButton等子类)时,您将能够使用新的FloatingActionButton属性来引用旧版本平台上的矢量drawable(以及app:srcCompat可用的任何其他drawable)。

android:src

srcCompat

将drawable设置为此ImageView的内容。允许在较旧版本的平台上运行时使用矢量drawable。

可以是android.support.v7.appcompat.R.attr.srcCompat形式的另一个资源的引用,也可以是"@[+][package:]type/name"形式的theme属性。


当使用"?[package:]type/name"时,不要忘记插入xmlns:app="http://schemas.android.com/apk/res-auto"


2
投票
app:srcCompat

是指支持库中的AppCompatActivity src

app:srcCompat="some_resource" 

是指简单的活动。


2
投票

当使用android:src="some_resource" AppCompat(或ImageViewImageButton等子类)时,你将能够使用新的FloatingActionButton属性来引用矢量drawables(以及app:srcCompat可用的任何其他drawable)。如果您在运行时更改drawable,您将能够使用与以前相同的android:src方法(没有更改)。

使用setImageResource()AppCompat是将矢量drawables集成到您的应用程序中最简单的方法。你会发现直接引用app:srcCompat之外的矢量drawable会在Lollipop之前失败。


0
投票

Android 5.0(API级别21)及更高版本提供矢量绘图支持,以便在旧版本app中支持矢量绘图:srcCompat已添加

© www.soinside.com 2019 - 2024. All rights reserved.