Вызов setCompoundDrawables() не отображает Compound Drawable

После вызова метода setCompoundDrawables составной Drawable не отображается.

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

Любые мысли?

Ответ 2

Используйте это (я тестировал). Он работает хорошо

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 );

Ответ 3

Изображение пустое, поскольку оно не имеет заданных границ. Вы можете использовать setCompoundDrawables(), но перед тем, как указывать границы изображения, используйте метод Drawable.setBounds()

Ответ 4

Немного проще:

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

Ответ 5

Пример сверху:

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

порядок аргументов: (левый, верхний, правый, нижний)

Ответ 6

Он устарел в API 22.

Этот код полезен для меня:

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

Ответ 8

Пример с Kotlin:

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

Ответ 9

В Котлине:

  1. Установить drawable:

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

или же

val drawable = ResourcesCompat.getDrawable(resources, R.drawable.ic_image, null)?.apply {
    setBounds(0, 0, minimumWidth, minimumHeight)
}
  1. Установить TextView:

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

или же

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