【问题标题】:Xamarin.Forms Android change color of Button ImageXamarin.Forms Android 更改按钮图像的颜色
【发布时间】:2018-03-05 09:48:44
【问题描述】:

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

这是我的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.SetColourFilter(Color.Blue, PortterDuff.Mode.SrcIn);不确定您为什么使用“Control.Background”,它也不是您在图像按钮上着色的背景。

标签: c# xamarin.forms xamarin.android renderer


【解决方案1】:

假设你的自定义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);
}

【讨论】:

    猜你喜欢
    • 2018-07-28
    • 2018-04-09
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多