90

How to set the ImageButton property of

app:srcCompat="@drawable/pic"

programmatically?

Something like myImageButton.setBackgroundResource(R.drawable.eng2); but the property of app:srcCompat.

Vadim Kotov
  • 8,084
  • 8
  • 48
  • 62
Isaac Darlong
  • 1,101
  • 1
  • 7
  • 12

5 Answers5

173

You need to use setImageResource() method.

imageButton.setImageResource(R.drawable.eng2);

Prerak Sola
  • 9,517
  • 7
  • 36
  • 67
25

First, ensure you are dealing with AppCompatImageView, not regular ImageView:

AppCompatImageView iv = (AppCompatImageView)findViewById(....);

and then you can do:

iv.setImageResource(R.drawable.pic);

See other public methods in docs.

Marcin Orlowski
  • 72,056
  • 11
  • 123
  • 141
3

Using setImageResource() should fetch its resource in a backwards-compatible manner without any further effort required.

However if you are using setImageDrawable(), the ImageView/ImageButton will not help with any backwards compat and it's up to you to supply a backward-compat drawable, which is important for eg. if using VectorDrawables. The following will load and set a drawable in such a way:

val drawable = AppCompatResources.getDrawable(context, resourceId)
image.setImageDrawable(drawable)
Tom
  • 6,946
  • 2
  • 47
  • 63
1

None, of the provided solutions worked for me. I was using an ImageView. Finally, I found out that using setBackgroundResource() works for me.

view.setBackgroundResource(R.drawable.ic_star_black_18dp)
MachineLearner
  • 805
  • 1
  • 8
  • 22
0

I guess other methods are outdated and wouldn't work at the time of writing this,

iv_yourImageView.setImageDrawable(getResources().getDrawable(R.drawable.your_drawable));

This will work.

JJD
  • 50,076
  • 60
  • 203
  • 339
miPlodder
  • 795
  • 8
  • 18