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.