Разница между приложением: srcCompat и android: src в XML-макете Android
Всякий раз, когда я создаю 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"
Ответы
Ответ 1
приложение: 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
Если вы используете android:src="@drawable/some_vector"
без vectorDrawables.useSupportLibrary = true
в файле build.gradle, и в вашем приложении есть векторные изображения (векторное изображение), то при сборке apk файла плагин gradle для Android генерирует много * Файлы .png для разных экранов (hdpi, xhdpi...) из каждого вашего вектора (только для API = <19). Результат - больший размер apk.
При использовании app:srcCompat="@drawable/some_vector"
с vectorDrawables.useSupportLibrary = true
android использует файлы векторного рисования без создания файлов *.png
.
Вы можете проверить это с помощью анализатора apk Android Studio. Просто создайте apk с и без vectorDrawables.useSupportLibrary = true
.
Я думаю, что это главное отличие.
Ответ 3
Использование:
app:srcCompat="@drawable/backImage"
Атрибут srcCompat фактически определен в библиотеке AppCompat. Важно: вам нужно будет добавить соответствующее пространство имен для этого.
xmlns:app="http://schemas.android.com/apk/res-auto"
Заметка
То, что вы получаете, кажется просто ошибкой, которую можно игнорировать. Я попытался и получил ту же ошибку, но она работает правильно.
Вы можете использовать tools:ignore="MissingPrefix"
чтобы временно не видеть эту ошибку.
Надеюсь, это поможет.
Ответ 4
При использовании AppCompat
с ImageView
(или подклассами, такими как ImageButton
и FloatingActionButton
), вы сможете использовать новый атрибут app:srcCompat
для ссылки на векторные рисунки на более старых версиях платформы (а также на любых других доступный для рисования android:src
).
android.support.v7.appcompat.R.attr.srcCompat:
srcCompat
Устанавливает drawable в качестве содержимого этого ImageView. Позволяет использовать векторную графику при работе на старых версиях платформы.
Может быть ссылкой на другой ресурс в форме "@[+][package:]type/name"
или атрибутом темы в форме "?[package:]type/name"
.
Don't forget adding [TG48] when use [TG49].
Ответ 5
Векторы и анимированные векторы поддерживались только в последних версиях фреймворка. srcCompat может использоваться с библиотекой совместимости, чтобы заставить их работать, но это работает только с определенными представлениями в библиотеке поддержки. Обратите внимание, что приложение: используется вместо android:. Это означает, что это не часть фреймворка, а параметр, определенный вашим приложением.
Ответ 6
app:srcCompat="some_resource"
означает, что именно AppCompatActivity src входит в библиотеку поддержки, а
android:src="some_resource"
относится к простой деятельности.
Ответ 7
При использовании AppCompat
с ImageView
(или подклассами, такими как ImageButton
и FloatingActionButton
), вы сможете использовать новый атрибут app:srcCompat
для ссылки на векторные app:srcCompat
(а также на любые другие доступные для рисования, доступные для android:src
). И если вы изменяете drawables во время выполнения, вы сможете использовать тот же setImageResource()
что и раньше (без изменений).
Использование AppCompat
и app:srcCompat
- самый надежный метод интеграции векторных рисунков в ваше приложение. Вы обнаружите, что прямая ссылка на векторные app:srcCompat
вне app:srcCompat
завершится с ошибкой до Lollipop.
Ответ 8
Android 5.0 (уровень API 21) и выше обеспечивает поддержку векторной графики, поэтому для поддержки векторных чертежей в более старых версиях приложение: srcCompat был добавлен