运行时更改按钮图标

问题描述 投票:0回答:1

我在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);

xamarin xamarin.android
1个回答
0
投票

您可以使用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,所以将设置第一个参数。

注意:leftstart“相同”。

关于此方法的更多信息here

最后您应该有类似这样的内容:

enter image description here

希望有帮助。-

© www.soinside.com 2019 - 2024. All rights reserved.