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 this
bağ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 21
Bö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);
}
BuildVersionCodes
Xamarin'e özgü bir sınıf değil mi?
getDrawable (int id)
Sınıf yöntemininResources
kullanımdan kaldırılması doğrudur . Şimdi yöntemigetDrawable (int id, Resources.Theme theme)
yeni theme parametresiyle kullanmalısınız.