如何通过编程设置app:srcCompat =“ @ drawable / pic”的ImageButton属性?


Answers:



24

首先,请确保您正在处理AppCompatImageView,不是常规的 ImageView

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

然后您可以执行以下操作:

iv.setImageResource(R.drawable.pic);

请参阅docs中的其他公共方法。


1
我正在将'ImageButton'与'app:srcCompat =“ @ drawable / pic”'一起使用,但设置为'setImageResource(R.drawable.pic);' 工作良好。谢谢
艾萨克·达隆

构建工具可能正在“替代”类
-snachmsm

嘿Marcin,您知道为什么我们需要以编程方式更改图像而不是在app:srcCompa =“ drawable /”之间给出路径吗
Vitaliy Terziev

1
我想添加到此答案中,我不得不使用AppCompatImageButton代替ImageButton

@Zhang那可能是因为您膨胀视图的活动没有扩展AppCompatActivity
Andre Romano

2

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

但是,如果您使用setImageDrawable(),则ImageView / ImageButton不会帮助您实现任何向后兼容,并且您需要提供一个向后兼容的drawable,这对于例如至关重要。如果使用VectorDrawables。下面将以这种方式加载和设置一个drawable:

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

1

我猜想其他方法已经过时了,在撰写本文时还行不通,

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

这将起作用。


0

没有,提供的解决方案对我有用。我正在使用ImageView。最终,我发现使用setBackgroundResource()对我有用。

view.setBackgroundResource(R.drawable.ic_star_black_18dp)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.