Kaynaktan Çekilebilir nasıl oluşturulur


283

Bir res/drawable/test.pngresmim var (R.drawable.test).
Bu görüntüyü Drawable, örneğin kabul eden bir işleve geçirmek istiyorum mButton.setCompoundDrawables().

Öyleyse bir görüntü kaynağını a Drawable.

Yanıtlar:


567

Faaliyetinizde getResources yöntemi olmalıdır. Yapmak:

Drawable myIcon = getResources().getDrawable( R.drawable.icon );

2
Bunu bir Activity sınıfının dışında istiyorsanız, getResources () öğesinin yaşadığı Bağlam'a ulaşmak için başka bir yol bulmanız gerekir; bu cevap
kurucuya geçmenizi önerir

50
API sürüm 21'den itibaren bu yöntem kullanımdan kaldırılmıştır ve aşağıdaki yöntemle değiştirilmeniz gerekir: Drawable drawable = ResourcesCompat.getDrawable (getResources (), page.getImageId (), null);
Boren

3
@Boren, ContextCompat.getDrawable (this, R.drawable.icon) ile aynı mıdır?
Zach

2
R.drawable.icon bir Vector çizilebilir ise yukarıdaki önerilerin hiçbiri işe yaramaz.
FractalBob

4
VEKTÖR ÇİZEBİLİRSENİZİ KULLANMAYIN. Bunun yerine AppCompatResources.getDrawable (context, R.drawable.icon) kullanın.
Dhaval Patel

136

Bu kod kullanımdan kaldırıldı:

Drawable drawable = getResources().getDrawable( R.drawable.icon );

Bunun yerine şunu kullanın:

Drawable drawable = ContextCompat.getDrawable(getApplicationContext(),R.drawable.icon);

11
Bunun temayı verilen bağlamdan uygulayacağını unutmayın. Herhangi bir temanın kullanılmadığından emin olmak için ResourcesCompat.getDrawable(getResources(), R.drawable.icon, null);(3. parametrenin isteğe bağlı bir Tema örneğidir) kullanabilirsiniz.
vaughandroid

23

getDrawable (int id)Yöntem API 22 olarak amorti edilir.

Bunun yerine getDrawable (int id, Resources.Theme theme)for API 21+

Kod böyle görünecektir.

Drawable myDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
    myDrawable = context.getResources().getDrawable(id, context.getTheme());
} else {
    myDrawable = context.getResources().getDrawable(id);
}

neden her api için boş kalmıyorsun? Artı: null seçeneğinin en iyi seçenek olduğundan emin misiniz?
jonathanrz

1
GetDrawable (int id, Resources.Theme teması) API 21'e kadar gelmedi
Chris Stillwell

veyagetResources().getDrawable(R.drawable.ic_warning_80dp, context?.theme)
Simon Featherstone

13

Sadece getDrawable (...) kullanırken "kullanımdan kaldırıldı" mesajı alıyorsanız, bunun yerine destek kitaplığından aşağıdaki yöntemi kullanmanız gerektiğini eklemek istiyorum.

ContextCompat.getDrawable(getContext(),R.drawable.[name])

Bu yöntemi kullanırken getResources () yöntemini kullanmanız gerekmez.

Bu, şöyle bir şey yapmaya eşdeğerdir:

Drawable mDrawable;
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
    mDrawable = ContextCompat.getDrawable(getContext(),R.drawable.[name]);
} else {
    mDrawable = getResources().getDrawable(R.id.[name]);
}

Bu hem Lollipop öncesi hem de sonrası sürümlerde çalışır.


4

Vektörü olsun veya olmasın, vektör kaynağından Çekilebilir Alın:

AppCompatResources.getDrawable(context, R.drawable.icon);

Not: vektör kaynağı için
ContextCompat.getDrawable(context, R.drawable.icon);üretecektir android.content.res.Resources$NotFoundException.


3

Çekmeceyi görüntünün ayarlandığı görünümden almaya çalışıyorsanız,

ivshowing.setBackgroundResource(R.drawable.one);

o zaman çekilebilir aşağıdaki kodla sadece boş değer döndürür ...

   Drawable drawable = (Drawable) ivshowing.getDrawable();

Bu nedenle, çekilebilir olanı belirli bir görünümden almak istiyorsanız, görüntüyü aşağıdaki kodla ayarlamak daha iyidir.

 ivshowing.setImageResource(R.drawable.one);

ancak o zaman çekilebilir tam olarak dönüştüreceğiz.


1

Bir parçadan miras alıyorsanız şunları yapabilirsiniz:

Drawable drawable = getActivity().getDrawable(R.drawable.icon)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.