使用Mipmap资源作为Button DrawableTop

时间:2016-04-19 10:17:29

标签: c# android xamarin.android

我目前正在开发一款Xamarin.Android应用。我有一个包含文本和DrawableTop mipmap图像的按钮。当我在axml中设置默认的DrawableTop图像时,它正在工作,我的图像出现在我想要的位置。

但是,我尝试做的是,在点击按钮时以编程方式更改按钮内的图像,并在另一次点击后恢复(使用布尔值检查实际状态)。

所以,我在网上查了一下,找到了用C#代码替换按钮中的drawables的功能。我还需要收集我想要的mipmap图像,但由于按钮需要Drawable objetcs,我尝试了几件事,唯一没有崩溃的是:

Drawable topDrawable = Resources.GetDrawable(Resource.Mipmap.mymipmap);
filterButton.SetCompoundDrawables(null, topDrawable, null, null);
//The parameters being, in order, left, top, right, bottom drawables.

编译时,我可以看到我的按钮在布局中定义了默认的DrawableTop,但是当我点击时,它会消失而不是显示新图像。我的猜测是topDrawable实际上等于null。

所以,我正在寻找一种获取Mipmap资源并将其用作drawable的方法。但也许我错了,问题出在其他地方。

提前致谢!

1 个答案:

答案 0 :(得分:0)

实际上,我认为解决方案更简单。当我用断点检查时,drawable不等于null。问题在于图像的位置。在布局中直接定义图像时,此Drawable会有一个自动定义的位置。当使用上述功能以编程方式替换drawable时,我们也替换位置。要保持原始位置并只更换图像,我们需要这样做:

Drawable topDrawable = Resources.GetDrawable(Resource.Mipmap.mymipmap);
filterButton.SetCompoundDrawablesWithIntrinsicBounds(null, topDrawable, null, null);

该功能的名称说明了一切。