如何通过编程方式设置app:srcCompat="@drawable/pic" ImageButton属性?

91
如何设置ImageButton属性。
app:srcCompat="@drawable/pic"

编程方式?

类似于 myImageButton.setBackgroundResource(R.drawable.eng2);,但使用 app:srcCompat 属性。

5个回答

173
你需要使用 setImageResource() 方法。 imageButton.setImageResource(R.drawable.eng2);

同样适用于Kotlin - Ben
这是否意味着我们不在XML上使用srcCompat更改? - gumuruh

26

首先,确保你正在处理的是AppCompatImageView,而不是普通的ImageView

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

然后你可以执行:

iv.setImageResource(R.drawable.pic);

查看其他公共方法,请参见文档


1
我正在使用带有'app:srcCompat="@drawable/pic"'的'ImageButton',但将其设置为'setImageResource(R.drawable.pic);'可以正常工作。谢谢 - Isaac Darlong
构建工具可能正在“实时”替换类。 - snachmsm
嘿,Marcin,你知道为什么我们需要通过编程来更改图像,而不是直接给出路径“app:srcCompa =”drawable /“吗? - Vitaliy Terziev
1
我想在这个回答中补充一点,我不得不使用AppCompatImageButton而不是ImageButton - Zhang
@张,这可能是因为你所填充视图的活动没有继承AppCompatActivity。 - Andre Romano
@AndreRomano 不是的,我的子视图是在一个继承相对布局的类中创建的。 - Zhang

3

使用setImageResource()应该以向后兼容的方式获取其资源,无需任何其他努力。

但是,如果使用setImageDrawable(),ImageView/ImageButton将不会帮助您进行任何向后兼容,您需要提供一个向后兼容的可绘制对象,这对于例如使用VectorDrawables非常重要。以下方式将以这样的方式加载和设置可绘制对象:

val drawable = AppCompatResources.getDrawable(context, resourceId)
image.setImageDrawable(drawable)

对于 ImageButtons,它正在工作。 - Kishan Solanki

1

对我来说,提供的解决方案都没有起作用。我正在使用一个ImageView。最终,我发现使用setBackgroundResource()对我有用。

view.setBackgroundResource(R.drawable.ic_star_black_18dp)

0

我猜其他方法已经过时,在撰写本文时不再适用。

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

这将会起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接