Perbedaan antara aplikasi: srcCompat dan android: src di tata letak Android XML

138

Setiap kali saya membuat ikon ImageView dengan ditambahkan menggunakan Aset Vector Android Studio, saya mendapatkan kesalahan di baris app:srcCompat="@drawable/ic_play"

Ketika saya mengubah app:srcCompatdengan android:src, kesalahan hilang tetapi ikon tampak pixelated.

Apa perbedaan utama di antara keduanya

app:srcCompat="@drawable/ic_play"

dan

android:src="@drawable/ic_play"
Zayid Mohammed
sumber

Jawaban:

139

aplikasi: srcCompat

adalah metode yang paling mudah untuk mengintegrasikan drawable vektor ke dalam aplikasi Anda. Drawable vektor memungkinkan Anda untuk mengganti beberapa aset png dengan grafik vektor tunggal, yang didefinisikan dalam XML. Sementara sebelumnya terbatas pada Lollipop dan perangkat yang lebih tinggi

Catatan

Pada Android Support Library 23.3.0 , dukungan vektor yang dapat digambar hanya dapat dimuat melalui app:srcCompat.

Anda perlu menambahkan vectorDrawables.useSupportLibrary = true ke build.gradlefile Anda

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

android: src

Menyetel drawable sebagai konten dari ImageView ini. Ini akan ditampilkan dalam ukuran aslinya. Tidak ada penskalaan otomatis.

IntelliJ Amiya
sumber
2
kesalahan dengan aplikasi: srcCompact hilang ketika menambahkan vectorDrawables.useSupportLibrary = true dalam modul aplikasi Gradle
Zayid Mohammed
3
Akankah aplikasi: srcCompat bertentangan dengan versi Android yang lebih lama? Lebih khusus, Api 19 adalah versi tertua yang saya maksud.
Equivocal
Wow akhirnya bisa menghilangkan ikon bitmap.
Meow Cat 2012
Tautan pos Google Plus sekarang mati
Vadim Kotov
Saya telah menambahkan di atas build.gradle, tetapi masih tidak berfungsi, ada ide?
David Callanan
20

Jika Anda menggunakan android:src="@drawable/some_vector"tanpa vectorDrawables.useSupportLibrary = truedalam file build.gradle dan aplikasi Anda memiliki gambar vektor (gambar vektor), maka saat membangun file apk Plugin Android gradle menghasilkan banyak file * .png untuk layar yang berbeda (hdpi, xhdpi ...) dari setiap vektor Anda dapat ditarik (hanya untuk API = <19). Hasilnya - ukuran apk yang lebih besar .

Saat menggunakan app:srcCompat="@drawable/some_vector"dengan vectorDrawables.useSupportLibrary = trueandroid menggunakan file yang dapat digambar vektor tanpa menghasilkan *.pngfile.

Anda dapat memeriksa ini dengan alat penganalisa Android Studio apk. Hanya membangun apk dengan dan tanpa vectorDrawables.useSupportLibrary = true.

Saya pikir ini adalah perbedaan utama.

bitvale
sumber
Jadi, jika Anda telah menggunakanSupportLibrary disetel ke true, mengapa Anda memerlukan sintaks khusus, bukan android: src =? Jika Anda menggunakan android: src = dengan useSupportLibrary diaktifkan, apakah Anda menghindari proliferasi PNG?
Oscar
9

Menggunakan:

app:srcCompat="@drawable/backImage"

Atribut srcCompat sebenarnya didefinisikan dalam pustaka AppCompat. Penting: Anda perlu menambahkan namespace yang sesuai untuk ini.

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

Catatan

Apa yang Anda dapatkan tampaknya hanya kesalahan serat yang dapat diabaikan. Saya telah mencoba dan mendapatkan kesalahan yang sama, tetapi berfungsi dengan benar.

Anda dapat menggunakan tools:ignore="MissingPrefix"untuk menghindari melihat kesalahan ini, untuk sementara waktu.

Saya harap ini membantu.

Chandrahasan
sumber
5

Saat menggunakan AppCompatdengan ImageView(atau subkelas seperti ImageButtondan FloatingActionButton), Anda akan dapat menggunakan app:srcCompatatribut baru untuk referensi gambar yang dapat digambar pada versi platform yang lebih lama (serta semua gambar lain yang tersedia untuk android:src) .

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

srcCompat

Menyetel drawable sebagai konten dari ImageView ini. Mengizinkan penggunaan gambar vektor saat berjalan pada versi platform yang lebih lama.

Dapat menjadi referensi ke sumber daya lain, dalam bentuk "@[+][package:]type/name"atau atribut tema dalam formulir "?[package:]type/name".


Jangan lupa menambahkan xmlns:app="http://schemas.android.com/apk/res-auto"saat digunakan app:srcCompat.

Mir-Ismaili
sumber
4

Vektor dan vektor animasi hanya didukung dalam versi terbaru dari framework. srcCompat dapat digunakan dengan pustaka kompatibilitas untuk membuatnya berfungsi, tetapi ini hanya berfungsi dengan tampilan tertentu di pustaka dukungan. Perhatikan bahwa aplikasi: digunakan sebagai ganti android :. Ini berarti ini bukan bagian dari kerangka kerja, tetapi parameter yang ditentukan oleh aplikasi Anda.

Gabe Sechan
sumber
3
app:srcCompat="some_resource" 

adalah merujuk bahwa itu adalah AppCompatActivity src yang datang di perpustakaan dukungan sementara

android:src="some_resource"

mengacu pada aktivitas sederhana.

Najeeb Idrees
sumber
3

Saat menggunakan AppCompatdengan ImageView(atau subkelas seperti ImageButtondan FloatingActionButton), Anda akan dapat menggunakan app:srcCompatatribut baru untuk mereferensikan drawable vektor (serta drawable lainnya yang tersedia untuk android:src). Dan jika Anda mengubah drawable saat runtime, Anda akan dapat menggunakan setImageResource()metode yang sama seperti sebelumnya (tidak ada perubahan di sana).

Menggunakan AppCompatdan app:srcCompatmerupakan metode yang paling mudah untuk mengintegrasikan drawable vektor ke dalam aplikasi Anda. Anda akan menemukan bahwa secara langsung referensi gambar yang dapat digambar di luar app:srcCompatakan gagal sebelum Lollipop .

Muhammad Younas
sumber
1

Android 5.0 (API level 21) dan yang lebih tinggi menyediakan dukungan vektor yang dapat digambar sehingga untuk mendukung gambar vektor di aplikasi versi yang lebih lama: srcCompat telah ditambahkan

SaravInfern
sumber