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

时间:2016-11-16 05:17:35

标签: android android-imageview layout-xml

每当我使用Android Studio的矢量资源创建带有图标的ImageView时,我在第app:srcCompat="@drawable/ic_play"

时收到错误

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

之间的主要区别是什么?
app:srcCompat="@drawable/ic_play"

android:src="@drawable/ic_play"

8 个答案:

答案 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)

AppCompatImageView(或ImageButtonFloatingActionButton等子类)一起使用时,您将可以使用新的{{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 src
android:src="some_resource"

指的是简单的活动。

答案 6 :(得分:2)

AppCompatImageView(或ImageButtonFloatingActionButton等子类)一起使用时,您将能够使用新的app:srcCompat属性参考向量drawables(以及android:src可用的任何其他drawable)。如果你在运行时更改drawables,你将能够使用与以前相同的setImageResource()方法(没有更改)。

使用AppCompatapp:srcCompat是将矢量绘图集成到您的应用中最简单的方法。您会发现直接引用app:srcCompat之外的矢量绘图将在 Lollipop 之前失败。

答案 7 :(得分:0)

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