Za każdym razem, gdy tworzę ImageView z ikoną dodaną przy użyciu zasobów Vector w Android Studio, pojawia się błąd w linii app:srcCompat="@drawable/ic_play"
Kiedy zmieniam app:srcCompat
z android:src
, błąd zniknął, ale ikona wygląda na pikselową.
Jaka jest główna różnica między
app:srcCompat="@drawable/ic_play"
i
android:src="@drawable/ic_play"
źródło
build.gradle
, ale nadal nie działa, jakieś pomysły?Jeśli używasz
android:src="@drawable/some_vector"
bezvectorDrawables.useSupportLibrary = true
w pliku build.gradle, a Twoja aplikacja ma obrazy wektorowe (wektory wektorowe), to podczas budowania pliku apk wtyczka Android Gradle generuje wiele plików * .png dla różnych ekranów (hdpi, xhdpi ...) z każdy z twoich wektorów do rysowania (tylko dla API = <19). Wynik - większy rozmiar apk .Podczas używania
app:srcCompat="@drawable/some_vector"
zvectorDrawables.useSupportLibrary = true
systemem Android używa plików wektorowych do rysowania bez generowania*.png
plików.Możesz to sprawdzić za pomocą narzędzia do analizowania aplikacji Android Studio. Po prostu zbuduj apk zi bez
vectorDrawables.useSupportLibrary = true
.Myślę, że to główna różnica.
źródło
Posługiwać się:
app:srcCompat="@drawable/backImage"
Atrybut srcCompat jest faktycznie zdefiniowany w bibliotece AppCompat. Ważne: w tym celu musisz dodać odpowiednią przestrzeń nazw.
xmlns:app="http://schemas.android.com/apk/res-auto"
Uwaga
To, co otrzymujesz, wydaje się być zwykłym błędem, który można zignorować. Próbowałem i otrzymałem ten sam błąd, ale działa poprawnie.
Możesz użyć,
tools:ignore="MissingPrefix"
aby tymczasowo uniknąć wyświetlania tego błędu.Mam nadzieję, że to pomoże.
źródło
Używając
AppCompat
withImageView
(lub podklas, takich jakImageButton
iFloatingActionButton
), będziesz mógł używać nowegoapp:srcCompat
atrybutu do odwoływania się do obiektów wektorowych w starszych wersjach platformy (a także do innych dostępnych do rysowaniaandroid:src
) .android.support.v7.appcompat.R.attr.srcCompat :
Nie zapomnij dodać,
xmlns:app="http://schemas.android.com/apk/res-auto"
kiedy używaszapp:srcCompat
.źródło
Wektory i animowane wektory były obsługiwane tylko w najnowszych wersjach platformy. srcCompat może być używany z biblioteką zgodności, aby działały, ale działa to tylko z niektórymi widokami w bibliotece pomocniczej. Zauważ, że zamiast androida używa się app :. Oznacza to, że nie jest częścią struktury, ale parametr zdefiniowany przez aplikację.
źródło
app:srcCompat="some_resource"
odnosi się do tego, że jest to AppCompatActivity src, który znajduje się w bibliotece wsparcia podczas
android:src="some_resource"
odnosi się do prostej czynności.
źródło
Używając
AppCompat
withImageView
(lub podklas, takich jakImageButton
iFloatingActionButton
), będziesz mógł użyć nowegoapp:srcCompat
atrybutu do odwoływania się do obiektów wektorowych do rysowania (a także do wszystkich innych dostępnych do rysowaniaandroid:src
). A jeśli zmieniasz elementy rysunkowe w czasie wykonywania, będziesz mógł użyć tej samejsetImageResource()
metody co wcześniej (bez zmian).Używanie
AppCompat
iapp:srcCompat
jest najbardziej niezawodną metodą integracji rysunków wektorowych z aplikacją. Przekonasz się, że bezpośrednie odwoływanie się do rysunków wektorowych poza programem Lollipopapp:srcCompat
nie powiedzie się .źródło
Android 5.0 (poziom API 21) i nowszy zapewnia obsługę grafiki wektorowej, więc w celu obsługi rysunków wektorowych w starszych wersjach dodano aplikację: srcCompat
źródło