我在GridLayout中的按钮具有如下定义的活动:
<Button
android:id="@+id/btnOpion4"
android:layout_columnWeight="1"
android:layout_rowWeight="1"
android:layout_width="0dp"
android:layout_height="0dp"
android:drawableStart="@drawable/btnSend"/>
为了能够在该按钮上显示图标,我必须创建可绘制的xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_send"
android:state_pressed="true" />
<item android:drawable="@drawable/ic_send"
android:state_focused="true" />
<item android:drawable="@drawable/ic_send" />
</selector>
并且所有这些都正常工作...
问题是,如何从后面的代码中更改图像?例如,如果用户单击某个选项,然后更改此按钮上的图标?
编辑:我可以通过它的ID查找可绘制对象并更改图标吗?类似于var btnsendDraw = FindViewById(Resource.Drawable.btnSend);
您可以使用SetCompoundDrawablesWithIntrinsicBounds
类中的Button
方法来完成。
在您的情况下,我将使用其他背景创建另一个可绘制文件:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_sent"
android:state_pressed="true" />
<item android:drawable="@drawable/ic_sent"
android:state_focused="true" />
<item android:drawable="@drawable/ic_sent" />
</selector>
我们称之为:btnSent
。
现在在您的代码中,当您想更改图像时,只需执行:
var drawable = GetDrawable(Resource.Drawable.btnSent);
btn1.SetCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
此方法将按此特定顺序获取4个不同的Drawable:左,上,下和下。因为只想替换start,所以将设置第一个参数。
注意:left
和start
“相同”。
关于此方法的更多信息here
最后您应该有类似这样的内容:
希望有帮助。-