Xamarin.Forms Android改变Button Image的颜色

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xamarin.Forms Android改变Button Image的颜色相关的知识,希望对你有一定的参考价值。

我有一个自定义ButtonRenderer android,我想改变我用于按钮的图像的颜色。

这是我的ButtonRenderer

public class VolosBaseButtonRenderer : Xamarin.Forms.Platform.Android.AppCompat.ButtonRenderer {
        public VolosBaseButtonRenderer(Context context) : base(context) { }

        protected override void OnElementChanged(ElementChangedEventArgs<Button> e) {
            base.OnElementChanged(e);

            // What I must do here for change the Image color????

        }

        protected override AppCompatButton CreateNativeControl() {
            var context = new ContextThemeWrapper(Context, Resource.Style.Widget_AppCompat_Button_Borderless);
            var button = new AppCompatButton(context, null, Resource.Style.Widget_AppCompat_Button_Borderless);
            return button;
        }    
    }

我试过这些方法,但都没有用:

Control.Background.SetColorFilter(global::Android.Graphics.Color.Blue, global::Android.Graphics.PorterDuff.Mode.SrcIn);

Control.Background.SetTint(Color.Red.ToAndroid());

如果有可能我可以在按钮上应用样式(但我不知道该怎么做)。

任何方法都没问题。

谢谢!

答案

假设您的自定义Button有两个属性,CustomImage,它存储一个资源图像名称的字符串,即“icon.png”,另一个ImageTintColor存储一个Xamarin.Forms.Color对象,您可以这样使用它:

var button = (CustomButton)Control.Element;
using (var image = GetScaleDrawable(Resources.GetDrawable(button.CustomImage.Split('.')[0]),
    (int)button.WidthRequest, 
    (int)button.HeightRequest))
{
    if (button.ImageTintColor != Xamarin.Forms.Color.Default)
        image.SetColorFilter(button.ImageTintColor.ToAndroid(), PorterDuff.Mode.SrcAtop);

    this.Control.SetPadding(0, 0, 0, 0);
    this.Control.SetCompoundDrawables(null, image, null, null);
}

以上是关于Xamarin.Forms Android改变Button Image的颜色的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Forms - 告诉 Android 在运行时切换样式主题

Xamarin.Forms 选中时禁用 Shell TabBar 字体缩放

Xamarin.forms(或)xamarin.ios/xamarin.android(或)本机

Xamarin改变移动开发的五个理由

Xamarin.Forms 是 Xamarin.Android、Xamarin.IoS 和 Xamarin.Win 的简单总和吗?

在 Xamarin.Forms 中使用 Android 绑定