SetCompoundDrawables () öğesi çağrıldığında Bileşik Çekilebilir değeri görüntülenmiyor


323

setCompoundDrawablesYöntemi çağırdıktan sonra Drawable bileşiği gösterilmez.

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn.setCompoundDrawables(myDrawable, null, null, null);

Düşüncesi olan var mı?


9
Aşağıdaki cevaplarda belirtildiği gibi, adlandırılan yöntemin varyantının (..)WithIntrinsicBoundsçağrılması gerekir. Yan notta, paddingBileşik
Çekilebilir

6
Belge diyor ki: Drawables zaten vardı olmalı setBounds(Rect)denir.

merhaba hunterp, sadece kahve dükkanında tanıştım (Angel), şimdi Android Drawables'ın ne olduğunu bildiğini biliyorum (ve belki birçoğuyla çalışırken hata hatalarından belleğe vurdun), size bazılarından bahsedebilirim birlikte çalıştığım projeler bu konuyla uğraşmak zorunda kaldı, Picasso ( github.com/square/picasso ) tarafından kullanılan github.com/JakeWharton/DiskLruCache (daha fazla android dostu yapmak için işbirliği yaptım ) 'a bakın
Gubatron

@ Dr1Ku Aslında daha önce var ve zaten çalışıyor.
Sotti

Yanıtlar:


629

7
api 17 gerekiyor, bu yüzden Drawable.setBounds () daha iyi olabilir
user1324936

6
çok teşekkür ederim .. bu benim için çalışıyor .. bu ikisi arasındaki farkın ne olduğunu bilebilir miyim?
AndEngine

1
@ user1324936 'Göreli' sürüm API 17 gerektirir, diğerleri önceki sürümlerle kullanılabilir
milosmns

11
@ user1324936 setCompoundDrawablesWithIntrinsicBounds API Düzey 3'e
Greg Ennis

SetCompoundDrawableRelativeWithIntrinsicBounds <kullanıyordum - bu API 17'de eklendi.
Neon Warge

69

Bunu kullanın (test ettim). İyi çalışıyor

Drawable image = context.getResources().getDrawable( R.drawable.ic_action );
int h = image.getIntrinsicHeight(); 
int w = image.getIntrinsicWidth();   
image.setBounds( 0, 0, w, h );
button.setCompoundDrawables( image, null, null, null );

1
Bu, EditText#setCompoundDrawablesWithIntrinsicBoundsen az API 17 gerektirdiğinden 17'den düşük API'ları hedeflerken yararlıdır .
Krøllebølle

6
Bunun için bir kaynak sağlayabilir misiniz? Gördüğüm tüm belgeler bunun API 1'den beri mevcut olduğunu gösteriyor .
kurifu

48

Görüntü sınır tanımlanmadığı için boş. Kullanabilirsiniz setCompoundDrawables()ancak Drawable.setBounds()yöntemi kullanarak resmin sınırlarını belirtmeden önce


1
En iyi yanıt, çünkü setBounds'un neden önemli olduğuna dair mantık sağladığınızdan.
Andy

@Andy Tam olarak, herhangi bir kelime olmadan bir kod satırını kopyalayan 800 oyla bu en iyi cevaplardan nefret edin
Big_Chair

44

Üste ayarlanan örnek:

view.setCompoundDrawablesWithIntrinsicBounds(
    null,
    getResources().getDrawable(R.drawable.some_img),
    null,
    null
);

bağımsız değişken sırası: (sol, üst, sağ, alt)


1
bu benim durumumda butonu kullanarak kabul edilen cevap olmalı. ve beklendiği gibi çalışır !!! Ayrıca geriye dönük uyumluluk.
mochadwi

22

Biraz daha basit:

Drawable image = context.getResources().getDrawable(R.drawable.ic_action );
image.setBounds( 0, 0, image.getIntrinsicWidth(), image.getIntrinsicHeight() );
button.setCompoundDrawables( image, null, null, null );

10

API 22'de kullanımdan kaldırılmıştır.

Bu kod benim için yararlı:

Drawable drawable = ResourcesCompat.getDrawable(getResources(),R.drawable.wen, null);
drawable.setBounds(0, 0, drawable.getMinimumWidth(),
drawable.getMinimumHeight());
tv.setCompoundDrawables(drawable, null, null, null);

3

Kotlin'de:

1) Set drawable:

val drawable = ContextCompat.getDrawable(context!!,R.drawable.ic_image)?.apply {
    setBounds(0, 0, intrinsicWidth, intrinsicHeight)
}

veya

val drawable = ResourcesCompat.getDrawable(resources, R.drawable.ic_image, null)?.apply {
    setBounds(0, 0, minimumWidth, minimumHeight)
}

2) ayarlayın TextView:

textView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null)

veya

button.setCompoundDrawables(null, drawable, null, null)

Textview için işe setCompoundDrawablesWithIntrinsicBoundsyarayacak ..
Akash Bisariya


1

Kotlin ile örnek:

    val myView = layoutInflater.inflate(R.layout.my_view, null) as TextView
    myView.setCompoundDrawablesWithIntrinsicBounds(0, myDrawable, 0, 0)

0

Resim, sınırları belirtmediğiniz için gösterilmiyor, bu nedenle burada 2 seçeneğiniz var.

1. Yöntem

setCompoundDrawablesWithIntrinsicBoundsAşağıda gösterildiği gibi yöntemi kullanın

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
btn. setCompoundDrawablesWithIntrinsicBounds(myDrawable, null, null, null);

2. Yöntem

Aşağıda gösterildiği gibi TextView uygulamasına uygulamadan önce çekmeceye sınırlar uygulayabilirsiniz

Drawable myDrawable = getResources().getDrawable(R.drawable.btn);
myDrawable.setBounds( 0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight());
btn.setCompoundDrawables(myDrawable, null, null, null);

Bu kadar.

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.