App: srcCompat ve Android arasındaki fark: Android'in düzen XML'sinde src


138

Android Studio'nun Vektör Varlıkları kullanılarak simge eklenmiş bir ImageView oluşturduğumda, satırda bir hata alıyorum app:srcCompat="@drawable/ic_play"

Ben değiştirdiğinizde app:srcCompatile android:src, hata gitti ama ikon görünüyor pikselleştirilmiş.

Arasındaki temel fark nedir

app:srcCompat="@drawable/ic_play"

ve

android:src="@drawable/ic_play"

Yanıtlar:


139

uygulaması: srcCompat

vektör çizimlerini uygulamanıza entegre etmenin en kusursuz yöntemidir . Önceden Lollipop ve daha yüksek cihazlarla sınırlıyken

Not

İtibariyle Android Destek Kitaplığı 23.3.0 , destek vektör drawables sadece aracılığıyla yüklenebilir app:srcCompat.

Eklemek gerekir gerçek vectorDrawables.useSupportLibrary = senin için build.gradledosyanın

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

android: src

Bu ImageView içeriği olarak bir çekilebilir öğe ayarlar. Orijinal boyutunda görüntülenecektir. Otomatik ölçeklendirme yok.


2
uygulamayla ilgili hata: srcCompact, gradle uygulama modülünde vectorDrawables.useSupportLibrary = true eklendiğinde ortadan kalktı
— Zayid Mohammed

3
App: srcCompat eski Android sürümleriyle çakışır mı? Daha spesifik olarak Api 19, bahsettiğim en eski sürüm.
— Equivocal

Wow sonunda bitmap simgelerinden kurtulabilir.
— Miyav Kedi 2012

Google Plus gönderi bağlantısı artık yok
— Vadim Kotov

Yukarıya ekledim build.gradle, ama hala çalışmıyor, herhangi bir fikir?
— David Callanan

20

Build.gradle dosyası android:src="@drawable/some_vector"olmadan kullanıyorsanız vectorDrawables.useSupportLibrary = trueve uygulamanızda vektör görüntüleri (vektör çekilebilir) varsa, o zaman apk dosyasını oluştururken Android gradle eklentisi, farklı ekranlar (hdpi, xhdpi ...) için birçok * .png dosyası oluşturur. vektörünüzün her biri çekilebilir (yalnızca API = <19 için). Sonuç - daha büyük boyutta apk .

Kullanırken app:srcCompat="@drawable/some_vector"ile vectorDrawables.useSupportLibrary = trueandroid kullanımlar oluşturmadan çekilebilir dosyaları vektör *.pngdosyaları.

Bunu Android Studio apk analiz aracı ile kontrol edebilirsiniz. Sadece birlikte ve olmadan apk oluşturun vectorDrawables.useSupportLibrary = true.

Sanırım ana fark bu.


Öyleyse useSupportLibrary öğesini true olarak ayarladıysanız, neden android: src = yerine özel sözdizimine ihtiyacınız var? UseSupportLibrary etkinken android: src = kullanıyorsanız, PNG'lerin çoğalmasını önler misiniz?
— Oscar

9

kullanın:

app:srcCompat="@drawable/backImage"

SrcCompat özniteliği aslında AppCompat kitaplığında tanımlanır. Önemli: Bunun için uygun ad alanını eklemeniz gerekecektir.

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

Not

Aldığınız şey, göz ardı edilebilecek bir tüy bırakma hatası gibi görünüyor. Aynı hatayı denedim ve aldım ama doğru çalışıyor.

tools:ignore="MissingPrefix"Bu hatayı geçici olarak görmemek için kullanabilirsiniz .

Umarım bu yardımcı olur.


5

Kullanırken AppCompatile ImageView(veya gibi alt sınıfları ImageButtonve FloatingActionButton), yeni kullanmak mümkün olacak app:srcCompatplatformun eski sürümlerinde referans vektör drawables için özellik (aynı zamanda sahip olduğu diğer çekilebilir android:src) .

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

srcCompat

Bu ImageView içeriği olarak bir çekilebilir öğe ayarlar. Platformun eski sürümlerinde çalışırken vektör çekilebilir kullanımına izin verir.

Formda başka bir kaynağa referans "@[+][package:]type/name"veya formdaki bir tema özelliği olabilir "?[package:]type/name".


Ekleyerek unutma xmlns:app="http://schemas.android.com/apk/res-auto"zaman kullanımını app:srcCompat.


4

Vektörler ve hareketli vektörler yalnızca çerçevenin son sürümlerinde destekleniyordu. srcCompat, bunların çalışması için uyumluluk kitaplığıyla birlikte kullanılabilir, ancak bu yalnızca destek kitaplığındaki belirli görünümlerle çalışır. Android: yerine app: kullanıldığına dikkat edin. Bu, çerçevenin bir parçası olmadığı, ancak uygulamanız tarafından tanımlanan bir parametre olduğu anlamına gelir.


3
app:srcCompat="some_resource" 

destek kitaplığında gelen AppCompatActivity src olduğunu belirtir.

android:src="some_resource"

basit aktiviteyi ifade eder.


3

Kullanırken AppCompatile ImageView(veya gibi alt sınıfları ImageButtonve FloatingActionButton), yeni kullanmak mümkün olacak app:srcCompatreferans vektör drawables için özellik (aynı zamanda sahip olduğu diğer çekilebilir android:src). Ve çalışma zamanında çekilebilir öğeleri değiştiriyorsanız, önceki setImageResource()yöntemle aynı yöntemi kullanabilirsiniz (orada değişiklik yapılmaz).

Kullanılması AppCompatve app:srcCompatuygulamanıza içine vektör drawables entegre çoğu şaşmaz yöntemidir. Lollipop'tanapp:srcCompat önce dışındaki vektör çekmecelerine doğrudan referans vermenin başarısız olacağını göreceksiniz .


1

Android 5.0 (API seviyesi 21) ve üstü, vektör çekilebilir desteği sağlar, bu nedenle eski sürümlerde vektör çekmecelerini desteklemek için uygulama: srcCompat eklendi

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.