Різниця між додатком: srcCompat та android: src у версії XML-макета Android


138

Щоразу, коли я створю ImageView із доданим значком за допомогою векторних активів Android Studio, у мене з’являється помилка app:srcCompat="@drawable/ic_play"

Коли я змінити app:srcCompatз android:src, помилка зникла , але значок виглядає пикселизации.

У чому головна відмінність

app:srcCompat="@drawable/ic_play"

і

android:src="@drawable/ic_play"

Відповіді:


139

додаток: srcCompat

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

Примітка

Як і в бібліотеці підтримки Android 23.3.0 , векторні малюнки підтримки можна завантажувати лише через app:srcCompat.

вам потрібно додати файл vectorDrawables.useSupportLibrary = вірно у свій build.gradleфайл

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

android: src

Встановлює графічний вміст як вміст цього ImageView. Він відображатиметься в оригінальному розмірі. Немає автоматичного масштабування.


2
помилка в застосунку: srcCompact пішов, коли додано vectorDrawables.useSupportLibrary = вірно в модулі додатків Gradle
Заїд Мохаммед

3
Чи буде програма: srcCompat конфліктувати зі старими версіями Android? Більш конкретно, Api 19 - найдавніша версія, про яку я звертаюся.
Однозначний

Нічого, нарешті, можна позбутися растрових значків.
Meow Cat 2012

Посилання поштового зв’язку Google Plus померло
Вадим Котов

Я додав вище build.gradle, але ідеї поки що не працюють?
Девід

20

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

При використанні app:srcCompat="@drawable/some_vector"з vectorDrawables.useSupportLibrary = trueandroid використовує векторні файли, що малюються, без генерації *.pngфайлів.

Ви можете перевірити це за допомогою інструменту аналізатора apk Android Studio. Просто будуйте apk з і без vectorDrawables.useSupportLibrary = true.

Я думаю, що це головна відмінність.


Отже, якщо у вас useSupportLibrary встановлено на true, навіщо вам потрібен спеціальний синтаксис, а не android: src =? Якщо ви використовуєте android: src = з активованим useSupportLibrary, ви уникаєте поширення PNG?
Оскар

9

Використання:

app:srcCompat="@drawable/backImage"

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

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

Примітка

Те, що ви отримуєте, здається, лише помилка помилки, яку можна ігнорувати. Я спробував і отримав ту саму помилку, але вона працює правильно.

Ви можете використовувати, tools:ignore="MissingPrefix"щоб тимчасово не бачити цю помилку.

Я сподіваюся, що це допомагає.


5

При використанні 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.


4

Вектори та анімовані вектори підтримувались лише в останніх версіях фреймворку. srcCompat можна використовувати з бібліотекою сумісності, щоб змусити їх працювати, але це працює лише з певними переглядами в бібліотеці підтримки. Зауважте, що додаток: використовується замість android :. Це означає, що це не частина рамки, а параметр, визначений вашим додатком.


3
app:srcCompat="some_resource" 

Посилаємося, що саме сервер AppCompatActivity входить в бібліотеку підтримки, поки

android:src="some_resource"

відноситься до простої діяльності.


3

При використанні AppCompatз ImageView(або підкласів , таких як ImageButtonі FloatingActionButton), ви будете мати можливість використовувати новий app:srcCompatатрибут опорного вектора вводиться коефіцієнта (як і будь-який інший малюємо доступні android:src). І якщо ви міняєте чернетки під час виконання, ви зможете використовувати той же setImageResource()метод, що і раніше (ніяких змін там немає).

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


1

Android 5.0 (рівень 21) і вище забезпечує підтримку векторного малювання, щоб підтримувати векторні малюнки в старіших версіях програми: srcCompat додано

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.