Разница между app: srcCompat и android: src в XML-макете Android

101

Всякий раз, когда я создаю ImageView с иконкой, добавленной с помощью Android Studio Vector Assets, я получаю сообщение об ошибке в строке app:srcCompat="@drawable/ic_play"

Когда я меняю app:srcCompat на android:src, ошибка app:srcCompat но значок выглядит пиксельным.

В чем главное отличие

app:srcCompat="@drawable/ic_play"

а также

android:src="@drawable/ic_play"
Теги:
android-studio
android-imageview

8 ответов

100
Лучший ответ

приложение: srcCompat

- самый надежный метод интеграции векторных чертежей в ваше приложение. Ветвители Vector позволяют заменять несколько активов png на один вектор графический, определенный в XML. Хотя ранее они были ограничены Lollipop и более высокими устройствами

Примечание

В качестве Android Support Library 23.3.0, поддержка векторных чертежей может быть загружена только через app:srcCompat.

вам нужно добавить vectorDrawables.useSupportLibrary = true в ваш build.gradle файл

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

android:src

Устанавливает выталкиваемый как контент этого ImageView. Он будет отображаться в его первоначальный размер. Нет автоматического масштабирования.

  • 2
    ошибка с app: srcCompact исчезла при добавлении vectorDrawables.useSupportLibrary = true в модуле приложения Gradle
  • 3
    Будет ли приложение: srcCompat конфликтовать со старыми версиями Android? В частности, Api 19 - самая старая версия, на которую я ссылаюсь.
Показать ещё 1 комментарий
8

Если вы используете android:src="@drawable/some_vector" без vectorDrawables.useSupportLibrary = true в файле build.gradle и у вашего приложения есть векторные изображения (векторное рисование), то при сборке apk файла плагин gradle для Android генерирует много *.png файлы для разных экранов (hdpi, xhdpi...) из каждого вашего вектора. Результат - больший размер apk.

При использовании app:srcCompat="@drawable/some_vector" с vectorDrawables.useSupportLibrary = true android использует файлы векторного рисования без создания файлов *.png.

Вы можете проверить это с помощью анализатора apk Android Studio. Просто создайте apk с и без vectorDrawables.useSupportLibrary = true.

Я думаю, что это главное отличие.

6

Использование:

app:srcCompat="@drawable/backImage"

Атрибут srcCompat фактически определен в библиотеке AppCompat. Важно: вам нужно будет добавить соответствующее пространство имен для этого.

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

Заметка

То, что вы получаете, кажется просто ошибкой, которую можно игнорировать. Я попытался и получил ту же ошибку, но она работает правильно.

Вы можете использовать tools:ignore="MissingPrefix" чтобы временно не видеть эту ошибку.

Надеюсь, это поможет.

3

При использовании AppCompat с ImageView (или подклассами, такими как ImageButton и FloatingActionButton), вы сможете использовать новый атрибут app:srcCompat для ссылок на векторные векторы на старых версиях платформы (также как любой другой доступный для android:src).

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

srcCompat

Устанавливает допустимое значение в качестве содержимого этого ImageView. Позволяет использовать векторную версию при работе на старых версиях платформы.

Может быть ссылка на другой ресурс в форме "@[+][package:]type/name" или атрибут темы в форме "?[package:]type/name".


Не забудьте вставить xmlns:app="http://schemas.android.com/apk/res-auto" при использовании app:srcCompat.

3

Векторы и анимированные векторы поддерживались только в последних версиях фреймворка. srcCompat может использоваться с библиотекой совместимости, чтобы заставить их работать, но это работает только с определенными представлениями в библиотеке поддержки. Обратите внимание, что приложение: используется вместо android:. Это означает, что это не часть фреймворка, а параметр, определенный вашим приложением.

2
app:srcCompat="some_resource" 

означает, что именно AppCompatActivity src входит в библиотеку поддержки, а

android:src="some_resource"

относится к простой деятельности.

2

При использовании AppCompat с ImageView (или подклассами, такими как ImageButton и FloatingActionButton), вы сможете использовать новый атрибут app:srcCompat для ссылки на векторные app:srcCompat (а также на любые другие доступные для рисования, доступные для android:src). И если вы изменяете drawables во время выполнения, вы сможете использовать тот же setImageResource() что и раньше (без изменений).

Использование AppCompat и app:srcCompat - самый надежный метод интеграции векторных рисунков в ваше приложение. Вы обнаружите, что прямая ссылка на векторные app:srcCompat вне app:srcCompat завершится с ошибкой до Lollipop.

0

Android 5.0 (уровень API 21) и выше обеспечивает поддержку векторной графики, поэтому для поддержки векторных чертежей в более старых версиях приложение: srcCompat был добавлен

Ещё вопросы

Сообщество Overcoder
Наверх
Меню