Dengan Android 22 API baru getResources().getDrawable()
sekarang sudah usang. Sekarang pendekatan terbaik adalah menggunakan saja getDrawable()
.
Apa yang berubah?
Resources#getDrawable(int)
dan Resources#getColor(int)
sudah usang.
Dengan Android 22 API baru getResources().getDrawable()
sekarang sudah usang. Sekarang pendekatan terbaik adalah menggunakan saja getDrawable()
.
Apa yang berubah?
Resources#getDrawable(int)
dan Resources#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
ContextCompat.getDrawable(getActivity(), R.drawable.name);
Anda akan mendapatkan Drawable yang ditata sesuai yang diperintahkan tema Aktivitas Anda. Ini mungkin yang Anda butuhkan.
B) dapat digambar tanpa atribut tema
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
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
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
Anda harus menggunakan kode berikut dari perpustakaan dukungan sebagai gantinya:
ContextCompat.getDrawable(context, R.drawable.***)
Menggunakan metode ini setara dengan menelepon:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return resources.getDrawable(id, context.getTheme());
} else {
return resources.getDrawable(id);
}
Pada API 21, Anda harus menggunakan getDrawable(int, Theme)
metode alih-alih getDrawable(int)
, karena memungkinkan Anda untuk mengambil objek yang dapat digambar yang terkait dengan ID sumber daya tertentu untuk kepadatan / tema layar yang diberikan. Memanggil getDrawable(int)
metode yang sudah usang sama dengan memanggil getDrawable(int, null)
.
getDrawable (int id)
metode Context
kelas. Ini sama dengan getResources().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)
(Ini this
konteksnya)
untuk lebih jelasnya ikuti tautan ini: ContextCompat
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:
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
Ini adalah contoh cara memvalidasi untuk versi yang lebih baru:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
} else {
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage));
}
Build.VERSION_CODES.LOLLIPOP is API 21
, Sehingga tidak hal ini harus if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)
atau if (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
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
itu bekerja untuk saya
Hanya contoh bagaimana saya memperbaiki masalah dalam array untuk memuat listView, semoga membantu.
mItems = new ArrayList<ListViewItem>();
// Resources resources = getResources();
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.az_lgo), getString(R.string.st_az), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.ca_lgo), getString(R.string.st_ca), getString(R.string.all_nums)));
// mItems.add(new ListViewItem(resources.getDrawable(R.drawable.co_lgo), getString(R.string.st_co), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.az_lgo, null), getString(R.string.st_az), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.ca_lgo, null), getString(R.string.st_ca), getString(R.string.all_nums)));
mItems.add(new ListViewItem(ResourcesCompat.getDrawable(getResources(), R.drawable.co_lgo, null), getString(R.string.st_co), getString(R.string.all_nums)));
Coba ini:
public static List<ProductActivity> getCatalog(Resources res){
if(catalog == null) {
catalog.add(new Product("Dead or Alive", res
.getDrawable(R.drawable.product_salmon),
"Dead or Alive by Tom Clancy with Grant Blackwood", 29.99));
catalog.add(new Product("Switch", res
.getDrawable(R.drawable.switchbook),
"Switch by Chip Heath and Dan Heath", 24.99));
catalog.add(new Product("Watchmen", res
.getDrawable(R.drawable.watchmen),
"Watchmen by Alan Moore and Dave Gibbons", 14.99));
}
}
Jika Anda menargetkan SDK> 21 (lollipop atau 5.0) gunakan
context.getDrawable(R.drawable.your_drawable_name)
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: -
getDrawable(int id, Resources.Theme theme)
Untuk Solusi Lakukan seperti ini: -
Di Jawa: -
ContextCompat.getDrawable(getActivity(), R.drawable.name);
atau
imgProfile.setImageDrawable(getResources().getDrawable(R.drawable.img_prof, getApplicationContext().getTheme()));
Di Kotlin: -
rel_week.background=ContextCompat.getDrawable(this.requireContext(), R.color.colorWhite)
atau
rel_day.background=resources.getDrawable(R.drawable.ic_home, context?.theme)
Semoga ini bisa membantu Anda. Terima kasih.
id api level 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
Sekarang Anda perlu menerapkan seperti ini
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
//
} else {
//
}
Mengikuti satu baris kode saja sudah cukup, semuanya akan ditangani oleh ContextCompat.getDrawable
ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
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
Di Kotlin Anda dapat menggunakan ekstensi
fun Context.getMyDrawable(id : Int) : Drawable?{
return ContextCompat.getDrawable(this, id)
}
lalu gunakan like
context.getMyDrawable(R.drawable.my_icon)
Build.VERSION_CODES.LOLLIPOP sekarang harus diubah menjadi BuildVersionCodes.Lollipop yaitu:
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder, Context.Theme);
} else {
this.Control.Background = this.Resources.GetDrawable(Resource.Drawable.AddBorder);
}
BuildVersionCodes
kelas khusus untuk Xamarin?
getDrawable (int id)
kelasResources
sudah usang. Anda sekarang harus menggunakan metodegetDrawable (int id, Resources.Theme theme)
dengan parameter tema baru.