Yeni android API 22 getResources().getDrawable()ile artık kullanımdan kaldırıldı. Şimdi en iyi yaklaşım sadece kullanmaktır getDrawable().
Ne değişti?
Resources#getDrawable(int)ve Resources#getColor(int)kullanımdan kaldırıldı bulundu.
Yeni android API 22 getResources().getDrawable()ile artık kullanımdan kaldırıldı. Şimdi en iyi yaklaşım sadece kullanmaktır getDrawable().
Ne değişti?
Resources#getDrawable(int)ve Resources#getColor(int)kullanımdan kaldırıldı bulundu.
Yanıtlar:
Hangi tür çekilebilir kağıt yüklediğinize bağlı olarak, bu kullanımdan kaldırmayı doğru (ve gelecekteki kanıt ) şekilde işlemek için bazı seçenekleriniz vardır:
A) tema özelliklerine sahip çekmeceler
ContextCompat.getDrawable(getActivity(), R.drawable.name);
Etkinlik temanızın talimat verdiği gibi stil sahibi bir Çizilebilir elde edersiniz. Muhtemelen ihtiyacınız olan şey budur.
B) tema özelliği olmayan çekmeceler
ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);
Eski tarzda çizilmemiş çekmeceni alacaksın. Not: Lütfen ResourcesCompat.getDrawable()edilir değil kaldırılan!
EXTRA) başka bir temanın tema özelliklerine sahip çekilebilirler
ResourcesCompat.getDrawable(getResources(), R.drawable.name, anotherTheme);
Bunun yerine destek kitaplığından aşağıdaki kodu kullanmalısınız:
ContextCompat.getDrawable(context, R.drawable.***)
Bu yöntemi kullanmak çağırmaya eşdeğerdir:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
return resources.getDrawable(id, context.getTheme());
} else {
return resources.getDrawable(id);
}
API 21'den itibaren, belirtilen ekran yoğunluğu / teması için belirli bir kaynak kimliğiyle ilişkili çizilebilir bir nesne getirmenize izin verdiği için getDrawable(int, Theme)yerine yöntemi kullanmalısınız getDrawable(int). Kullanımdan kaldırılan getDrawable(int)yöntemin çağrılması çağrıyla eşdeğerdir getDrawable(int, null).
getDrawable (int id)yöntemini de ifade ediyor Context. Bu, getResources().getDrawable(id, getTheme());yeni API ile aynıdır ve aynı zamanda kullanır.
getDrawable(int, Resources.Theme).
Bu satırı değiştirin:
getResources().getDrawable(R.drawable.your_drawable)
ile ResourcesCompat.getDrawable(getResources(), R.drawable.your_drawable, null)
DÜZENLE
ResourcesCompatşimdi de kullanımdan kaldırıldı. Ancak bunu kullanabilirsiniz:
ContextCompat.getDrawable(this, R.drawable.your_drawable)(İşte thisbağlam)
daha fazla bilgi için bu bağlantıyı takip edin: ContextCompat
getResources().getDrawable() API düzeyinde 22 kullanımdan kaldırıldı. Şimdi temayı eklemeliyiz:getDrawable (int id, Resources.Theme teması) (API düzey 21'e eklendi)
Bu bir örnektir:
myImgView.setImageDrawable(getResources().getDrawable(R.drawable.myimage, getApplicationContext().getTheme()));
Bu, sonraki sürümler için nasıl doğrulama yapılacağına bir örnektir:
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 21Böylece bu olmamalı if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1)ya if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP)? Boşver. Aşağıdan "Yöntem API 21'e eklendi, ancak API 22'ye kadar kullanımdan kaldırılmadı. :)"
Kullanabilirsiniz
ContextCompat.getDrawable(getApplicationContext(),R.drawable.example);
bu benim için iş
ListView yüklemek için bir dizideki sorunu nasıl düzelttiğime sadece bir örnek, yardımcı olacağını umuyorum.
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)));
Bunu dene:
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));
}
}
SDK> 21'i (lolipop veya 5.0) hedefliyorsanız
context.getDrawable(R.drawable.your_drawable_name)
getDrawable (int drawable) , API düzey 22'de kullanımdan kaldırılmıştır. Referans için bu bağlantıya bakın .
Şimdi bu sorunu çözmek için aşağıdaki gibi id ile birlikte yeni bir yapıcı geçmek zorunda: -
getDrawable(int id, Resources.Theme theme)
Çözümler için Bunu yapın: -
Java dilinde: -
ContextCompat.getDrawable(getActivity(), R.drawable.name);
veya
imgProfile.setImageDrawable(getResources().getDrawable(R.drawable.img_prof, getApplicationContext().getTheme()));
Kotlin'de: -
rel_week.background=ContextCompat.getDrawable(this.requireContext(), R.color.colorWhite)
veya
rel_day.background=resources.getDrawable(R.drawable.ic_home, context?.theme)
Umarım bu size yardımcı olacaktır.
tr api seviye 14
marker.setIcon(ResourcesCompat.getDrawable(getResources(), R.drawable.miubicacion, null));
Şimdi böyle uygulamanız gerekiyor
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //>= API 21
//
} else {
//
}
Tek bir kod satırını takip etmek yeterlidir, ContextCompat.getDrawable tarafından her şey halledilir
ContextCompat.getDrawable(this, R.drawable.your_drawable_file)
Bazıları için hala bu konunun önerisini uyguladıktan sonra bile bu sorunu çözmek için (ben böyle bir olurdu) Uygulama sınıfınıza onCreate () yöntemi bu satırı ekleyin
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
Burada ve burada önerildiği gibi bazen bu, özellikle menü öğeleriyle uğraşırken kaynaklardan vektörlere erişmek için gereklidir.
Kotlin'de uzantıyı kullanabilirsiniz
fun Context.getMyDrawable(id : Int) : Drawable?{
return ContextCompat.getDrawable(this, id)
}
sonra gibi kullan
context.getMyDrawable(R.drawable.my_icon)
Build.VERSION_CODES.LOLLIPOP şimdi BuildVersionCodes.Lollipop olarak değiştirilmelidir.
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);
}
BuildVersionCodesXamarin'e özgü bir sınıf değil mi?
getDrawable (int id)Sınıf yöntemininResourceskullanımdan kaldırılması doğrudur . Şimdi yöntemigetDrawable (int id, Resources.Theme theme)yeni theme parametresiyle kullanmalısınız.