PEMBARUAN TERBARU - Jun / 2019
Support Library telah sedikit berubah sejak jawaban aslinya. Sekarang, bahkan plugin Android untuk Gradle dapat secara otomatis menghasilkan PNG pada waktu pembuatan. Jadi, di bawah ini adalah dua pendekatan baru yang seharusnya berhasil saat ini. Anda dapat menemukan info lebih lanjut di sini:
Generasi PNG
Gradle dapat secara otomatis membuat gambar PNG dari aset Anda pada waktu pembuatan. Namun, dalam pendekatan ini, tidak semua elemen xml didukung . Solusi ini nyaman karena Anda tidak perlu mengubah apa pun di kode atau di build.gradle Anda. Pastikan Anda menggunakan Android Plugin 1.5.0 atau lebih tinggi dan Android Studio 2.2 atau lebih tinggi .
Saya menggunakan solusi ini di aplikasi saya dan berfungsi dengan baik. Tidak perlu flag build.gradle tambahan . Tidak perlu peretasan. Jika Anda membuka / build / generated / res / pngs / ... Anda dapat melihat semua PNG yang dihasilkan.
Jadi, jika Anda memiliki beberapa ikon sederhana (karena tidak semua elemen xml didukung), solusi ini mungkin cocok untuk Anda. Cukup perbarui Android Studio dan plugin Android Anda untuk Gradle.
Pustaka Dukungan
Mungkin, ini adalah solusi yang akan berhasil untuk Anda. Jika Anda datang ke sini, itu berarti Android Studio Anda tidak menghasilkan PNG secara otomatis. Jadi, aplikasi Anda mogok.
Atau mungkin, Anda tidak ingin Android Studio menghasilkan PNG sama sekali.
Berbeda dari "pembuatan PNG Otomatis" yang mendukung subset elemen XML, solusi ini mendukung semua tag xml. Jadi, Anda memiliki dukungan penuh untuk drawable vektor Anda.
Anda harus terlebih dahulu memperbarui build.gradle Anda untuk mendukungnya:
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
dependencies {
implementation 'com.android.support:appcompat-v7:23.2.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
}
Dan kemudian, gunakan app:srcCompat
sebagai ganti android:src
saat memuat VectorDrawables
. Jangan lupakan ini.
Sebab TextView
, jika Anda menggunakan androidx
versi Pustaka Dukungan, Anda dapat menggunakan app:drawableLeftCompat
(atau kanan, atas, bawah) sebagai gantiapp:drawableLeft
Dalam kasus CheckBox
/ RadioButton
, gunakan app:buttonCompat
sebagai pengganti android:button
.
Jika Anda tidak menggunakan androidx
versi Pustaka Dukungan dan Anda minSdkVersion
adalah 17
atau lebih tinggi atau menggunakan tombol, Anda dapat mencoba menyetel secara terprogram melalui
Drawable icon = AppCompatResources.getDrawable(context, <drawable_id>);
textView.setCompoundDrawablesWithIntrinsicBounds(<leftIcon>,<topIcon>,<rightIcon>,<bottomIcon>);
UPDATE - Jul / 2016
Mereka mengaktifkan kembali VectorDrawable di
Android Support Library 23.4.0
Untuk pengguna AppCompat , kami telah menambahkan API keikutsertaan untuk mengaktifkan kembali dukungan Vector Drawable dari sumber daya (perilaku yang ditemukan di 23.2) melalui AppCompatDelegate.setCompatVectorFromResourcesEnabled (true) - perlu diingat bahwa hal ini masih dapat menyebabkan masalah dengan penggunaan memori dan masalah saat memperbarui contoh Konfigurasi, oleh karena itu mengapa dinonaktifkan secara default.
Mungkin , build.gradle
pengaturan sekarang sudah usang dan Anda hanya perlu mengaktifkannya dalam aktivitas yang tepat (namun perlu diuji).
Sekarang, untuk mengaktifkannya, Anda harus melakukan:
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
...
}
Jawaban Asli - Apr / 2016
Saya rasa ini terjadi karena Support Vector dinonaktifkan di versi library terbaru: 23.3.0
Menurut POST ini :
Untuk pengguna AppCompat, kami telah memutuskan untuk menghapus fungsionalitas yang memungkinkan Anda menggunakan vector drawable dari sumber daya pada perangkat pra-Lollipop karena masalah yang ditemukan dalam implementasi pada versi 23.2.0 / 23.2.1 (ISSUE 205236) . Menggunakan app: srcCompat dan setImageResource () terus berfungsi.
Jika Anda mengunjungi masalah ISSUE 205236 , tampaknya mereka akan mengaktifkannya di masa mendatang tetapi masalah memori tidak akan segera diperbaiki:
Pada rilis berikutnya saya telah menambahkan API keikutsertaan di mana Anda dapat mengaktifkan kembali dukungan VectorDrawable yang telah dihapus. Itu datang dengan peringatan yang sama seperti sebelumnya (penggunaan memori dan masalah dengan pembaruan Konfigurasi).
Saya memiliki masalah serupa. Jadi, dalam kasus saya, saya mengembalikan semua ikon yang menggunakan drawable vektor dari sumber daya ke gambar PNG lagi (karena masalah memori akan terus terjadi bahkan setelah mereka memberikan opsi untuk mengaktifkannya lagi).
Saya tidak yakin apakah ini adalah opsi terbaik, tetapi menurut saya ini memperbaiki semua kerusakan.