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

Zay*_*med 121 android android-imageview layout-xml

每当我使用Android Studio的Vector资源创建带有图标的ImageView时,我就会收到错误 app:srcCompat="@drawable/ic_play"

当我改变app:srcCompatandroid:src,错误消失但图标看起来像素化.

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

app:srcCompat="@drawable/ic_play"
Run Code Online (Sandbox Code Playgroud)

android:src="@drawable/ic_play"
Run Code Online (Sandbox Code Playgroud)

Int*_*iya 122

应用:srcCompat

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

注意

Android支持库23.3.0开始,支持向量drawable只能通过加载app:srcCompat.

您需要将vectorDrawables.useSupportLibrary = true添加到您的build.gradle文件中

    // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
    }  
 }  
Run Code Online (Sandbox Code Playgroud)

机器人:SRC

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

  • 应用程序:srcCompat会与较旧的Android版本冲突吗?更具体地说,Api 19是我所指的最古老的版本. (3认同)
  • 在Gradle app模块中添加vectorDrawables.useSupportLibrary = true时,app:srcCompact的错误消失了 (2认同)

bit*_*ale 14

如果你android:src="@drawable/some_vector"没有vectorDrawables.useSupportLibrary = true在build.gradle文件中使用你的应用程序有矢量图像(矢量drawable),那么构建app:srcCompat="@drawable/some_vector"文件android gradle插件会vectorDrawables.useSupportLibrary = true从你的每个矢量drawable 生成不同屏幕(hdpi,xhdpi ...)的很多文件.结果 - 更大的尺寸*.png.

当使用vectorDrawables.useSupportLibrary = trueandroid:src="@drawable/some_vector"Android使用矢量绘制的文件,而不会生成vectorDrawables.useSupportLibrary = true文件.

您可以使用Android Studio apk分析工具进行检查.只需使用和不使用构建apk app:srcCompat="@drawable/some_vector".

我认为这是主要的区别.

  • 因此,如果您将 useSupportLibrary 设置为 true,为什么需要特殊语法,而不是 android:src= ?如果您在激活 useSupportLibrary 的情况下使用 android:src= ,是否可以避免 PNG 的扩散? (6认同)

Cha*_*san 9

使用:

app:srcCompat="@drawable/backImage"
Run Code Online (Sandbox Code Playgroud)

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

xmlns:app="http://schemas.android.com/apk/res-auto"
Run Code Online (Sandbox Code Playgroud)

注意

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

您可以tools:ignore="MissingPrefix"暂时避免看到此错误.

我希望这有帮助.


Naj*_*ees 5

app:srcCompat="some_resource" 
Run Code Online (Sandbox Code Playgroud)

是指它是支持库中的 AppCompatActivity src 而

android:src="some_resource"
Run Code Online (Sandbox Code Playgroud)

指简单的活动。


Mir*_*ili 5

当使用AppCompat具有ImageView(或子类,如ImageButtonFloatingActionButton),你就可以使用新的app:srcCompat属性,以参考矢量绘图资源在旧版本的平台(以及任何其他绘制可用android:src

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

srcCompat

设置一个drawable作为此ImageView的内容。在较旧版本的平台上运行时,允许使用矢量可绘制。

可以以形式引用另一资源,也可以以形式引用"@[+][package:]type/name"主题属性"?[package:]type/name"


xmlns:app="http://schemas.android.com/apk/res-auto"使用时不要忘记添加app:srcCompat