Dengan Android 22 API baru getResources().getDrawable()
sekarang sudah usang. Sekarang pendekatan terbaik adalah menggunakan saja getDrawable()
.
Apa yang berubah?
Dengan Android 22 API baru getResources().getDrawable()
sekarang sudah usang. Sekarang pendekatan terbaik adalah menggunakan saja getDrawable()
.
Apa yang berubah?
getDrawable (int id)
kelasResources
sudah usang. Anda sekarang harus menggunakan metodegetDrawable (int id, Resources.Theme theme)
dengan parameter tema baru.Resources#getDrawable(int)
danResources#getColor(int)
sudah usang.Jawaban:
Anda memiliki beberapa opsi untuk menangani penghinaan ini dengan cara yang benar (dan bukti masa depan ), tergantung pada jenis gambar apa yang Anda muat:
A) dapat digambar dengan atribut tema
Anda akan mendapatkan Drawable yang ditata sesuai yang diperintahkan tema Aktivitas Anda. Ini mungkin yang Anda butuhkan.
B) dapat digambar tanpa atribut tema
Anda akan mendapatkan drawable unstyled Anda dengan cara lama. Harap Catatan:
ResourcesCompat.getDrawable()
ini tidak ditinggalkan!EXTRA) dapat digambar dengan atribut tema dari tema lain
sumber
Sunting: lihat posting blog saya pada subjek untuk penjelasan yang lebih lengkap
Anda harus menggunakan kode berikut dari perpustakaan dukungan sebagai gantinya:
Menggunakan metode ini setara dengan menelepon:
Pada API 21, Anda harus menggunakan
getDrawable(int, Theme)
metode alih-alihgetDrawable(int)
, karena memungkinkan Anda untuk mengambil objek yang dapat digambar yang terkait dengan ID sumber daya tertentu untuk kepadatan / tema layar yang diberikan. MemanggilgetDrawable(int)
metode yang sudah usang sama dengan memanggilgetDrawable(int, null)
.sumber
getDrawable (int id)
metodeContext
kelas. Ini sama dengangetResources().getDrawable(id, getTheme());
dan juga menggunakan API baru.getDrawable(int, Resources.Theme)
.Ganti baris ini:
getResources().getDrawable(R.drawable.your_drawable)
dengan
ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
EDIT
ResourcesCompat
juga sudah usang sekarang. Tetapi Anda dapat menggunakan ini:ContextCompat.getDrawable(this, R.drawable.your_drawable)
(Inithis
konteksnya)untuk lebih jelasnya ikuti tautan ini: ContextCompat
sumber
ResourcesCompat
sudah usang. Seharusnya bekerja dengan baik.getResources().getDrawable()
sudah tidak digunakan lagi di API level 22. Sekarang kita harus menambahkan tema:getDrawable (int id, Resources.Theme theme) (Ditambahkan di API level 21)
Ini adalah sebuah contoh:
Ini adalah contoh cara memvalidasi untuk versi yang lebih baru:
sumber
Build.VERSION_CODES.LOLLIPOP is API 21
, Sehingga tidak hal ini harusif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
atauif (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)
? Sudahlah. Dari bawah "Metode ini ditambahkan dalam API 21 tetapi tidak dihentikan sampai API 22. :)"Kamu bisa menggunakan
itu bekerja untuk saya
sumber
Hanya contoh bagaimana saya memperbaiki masalah dalam array untuk memuat listView, semoga membantu.
sumber
Coba ini:
sumber
Jika Anda menargetkan SDK> 21 (lollipop atau 5.0) gunakan
Lihat dokumen
sumber
getDrawable (int drawable) sudah tidak digunakan lagi di API level 22. Untuk referensi lihat tautan ini .
Sekarang untuk menyelesaikan masalah ini kita harus melewati konstructer baru bersama dengan id seperti: -
Untuk Solusi Lakukan seperti ini: -
Di Jawa: -
atau
Di Kotlin: -
atau
Semoga ini bisa membantu Anda. Terima kasih.
sumber
id api level 14
sumber
Sekarang Anda perlu menerapkan seperti ini
Mengikuti satu baris kode saja sudah cukup, semuanya akan ditangani oleh ContextCompat.getDrawable
sumber
Untuk beberapa yang masih mendapatkan masalah ini untuk dipecahkan bahkan setelah menerapkan saran dari utas ini (saya dulunya seperti itu) tambahkan baris ini pada kelas Aplikasi Anda, metode onCreate ()
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
Seperti yang disarankan di sini dan di sini kadang-kadang ini diperlukan untuk mengakses vektor dari sumber daya terutama ketika Anda berurusan dengan item menu, dll
sumber
Di Kotlin Anda dapat menggunakan ekstensi
lalu gunakan like
sumber
Build.VERSION_CODES.LOLLIPOP sekarang harus diubah menjadi BuildVersionCodes.Lollipop yaitu:
sumber
BuildVersionCodes
kelas khusus untuk Xamarin?