Android Studio sekarang mendukung aset vektor pada 21+ dan akan menghasilkan png untuk versi yang lebih rendah pada waktu kompilasi. Saya memiliki aset vektor (dari Material Ikon) yang ingin saya ubah warna isiannya. Ini berfungsi di 21+, tetapi png yang dihasilkan tidak berubah warna. Apakah ada cara untuk melakukan ini?
<vector android:height="48dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/primary" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
android:tint
harus setelahandroid:src
drawableLeft
diButton
?Kamu bisa melakukannya.
TETAPI Anda tidak dapat menggunakan referensi @color untuk warna (..lame), jika tidak, ia hanya akan berfungsi untuk L +
sumber
Seperti yang dikatakan dalam jawaban lain, jangan mengedit vektor yang dapat digambar secara langsung, alih-alih Anda dapat mewarnai kode java, seperti itu:
Dan demi kesederhanaan, saya telah menciptakan kelas pembantu:
Untuk menggunakan lakukan saja hal berikut:
Atau:
sumber
Untuk mengubah warna gambar vektor, Anda dapat langsung menggunakan android: tint = "@ color / colorAccent"
Untuk mengubah warna secara terprogram
sumber
getColor(ResId, Theme)
tidak. Atau Anda dapat menggunakanResourcesCompat.getColor(getResources(), R.color.primary, null);
jika Anda tidak peduli dengan tema ... atau jika delegasi konteks / kebijakan Anda adalah suatu kegiatan, Anda dapat melakukannyagetTheme()
untuk parameter terakhir itu.Saat ini soloution yang berfungsi adalah android: fillColor = "# FFFFFF"
Tidak ada yang berhasil untuk saya kecuali pengodean keras dalam vektor
Namun, fillcolor dan tint mungkin segera berfungsi. Silakan lihat diskusi ini untuk informasi lebih lanjut:
https://code.google.com/p/android/issues/detail?id=186431
Juga warna mighr menempel di cache sehingga menghapus aplikasi untuk semua pengguna dapat membantu.
sumber
Studio Android sekarang mendukung vektor pre-lollipop. Tidak ada konversi PNG. Anda masih dapat mengubah warna isian Anda dan itu akan berhasil.
Di ImageView Anda, gunakan
Di file gradle Anda,
sumber
Perbarui:
AppCompat
dukunganJawaban lain yang mencurigakan jika hanya
android:tint
akan bekerja pada 21 perangkat saja, AppCompat ( v23.2.0 dan yang lebih tinggi ) sekarang menyediakan penanganan atribut warna yang kompatibel dengan terbelakang.Jadi, tindakannya adalah menggunakan
AppCompatImageView
danapp:srcCompat
(dalam namespace AppCompat) alih-alihandroid:src
(Android namespace).Berikut ini sebuah contoh (AndroidX: Ini adalah androidx.appcompat.widget.AppCompatImageView ;)):
Dan jangan lupa untuk mengaktifkan dukungan gambar vektor di gradle:
sumber
AppCompatImageView
ini di bawahandroidx.appcompat.widget.AppCompatImageView
Tambahkan perpustakaan ini ke Gradle untuk mengaktifkan vektor warna yang dapat digambar di Perangkat Android lama.
dan sinkronisasi ulang gradle. Saya pikir itu akan menyelesaikan masalah.
sumber
Jika vektor tidak menunjukkan pengaturan warna secara individual menggunakan fillColor maka mereka dapat diatur ke parameter widget default.
Coba tambahkan
app:itemIconTint="@color/lime"
ke activity_main.xml untuk menetapkan jenis warna default untuk ikon widget.VectorDrawable @ developers.android
sumber
jika Anda ingin mendukung pre lolipop versi lama
gunakan kode xml yang sama dengan beberapa perubahan
bukannya normal
ImageView --> AppCompatImageView
dari pada
android:src --> app:srcCompat
di sini adalah contoh
jangan lupa perbarui grad Anda sebagai @ Sayooj Valsan sebutkan
Perhatikan Untuk siapa pun yang menggunakan vektor, jangan pernah memberikan referensi vektor Anda ke warna seperti ini
android:fillColor="@color/primary"
memberikan nilai hex.sumber
@color
untukfillcolor
?Bagi mereka yang tidak menggunakan
ImageView
, berikut ini berfungsi untuk saya di dataranView
(dan karenanya perilaku harus meniru pada segala jenis tampilan)sumber