How to set ImageButton property of app:srcCompat="@drawable/pic" programmatically?

Solution 1:

You need to use setImageResource() method.

imageButton.setImageResource(R.drawable.eng2);

Solution 2:

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.

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