Всякий раз, когда я создаю 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"
- самый надежный метод интеграции векторных чертежей в ваше приложение. Ветвители 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
}
}
Устанавливает выталкиваемый как контент этого ImageView. Он будет отображаться в его первоначальный размер. Нет автоматического масштабирования.
Если вы используете 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
.
Я думаю, что это главное отличие.
Использование:
app:srcCompat="@drawable/backImage"
Атрибут srcCompat фактически определен в библиотеке AppCompat. Важно: вам нужно будет добавить соответствующее пространство имен для этого.
xmlns:app="http://schemas.android.com/apk/res-auto"
Заметка
То, что вы получаете, кажется просто ошибкой, которую можно игнорировать. Я попытался и получил ту же ошибку, но она работает правильно.
Вы можете использовать tools:ignore="MissingPrefix"
чтобы временно не видеть эту ошибку.
Надеюсь, это поможет.
При использовании 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
.
Векторы и анимированные векторы поддерживались только в последних версиях фреймворка. srcCompat может использоваться с библиотекой совместимости, чтобы заставить их работать, но это работает только с определенными представлениями в библиотеке поддержки. Обратите внимание, что приложение: используется вместо android:. Это означает, что это не часть фреймворка, а параметр, определенный вашим приложением.
app:srcCompat="some_resource"
означает, что именно AppCompatActivity src входит в библиотеку поддержки, а
android:src="some_resource"
относится к простой деятельности.
При использовании AppCompat
с ImageView
(или подклассами, такими как ImageButton
и FloatingActionButton
), вы сможете использовать новый атрибут app:srcCompat
для ссылки на векторные app:srcCompat
(а также на любые другие доступные для рисования, доступные для android:src
). И если вы изменяете drawables во время выполнения, вы сможете использовать тот же setImageResource()
что и раньше (без изменений).
Использование AppCompat
и app:srcCompat
- самый надежный метод интеграции векторных рисунков в ваше приложение. Вы обнаружите, что прямая ссылка на векторные app:srcCompat
вне app:srcCompat
завершится с ошибкой до Lollipop.
Android 5.0 (уровень API 21) и выше обеспечивает поддержку векторной графики, поэтому для поддержки векторных чертежей в более старых версиях приложение: srcCompat был добавлен