使用Android Xamarin上的Image向按钮渲染器添加填充

时间:2017-12-18 16:25:16

标签: android xamarin

我在使用Android上的Image填充按钮时遇到问题。我在iOS上使用Insets工作但在Android上无法实现相同的功能。

这是我的Android渲染器代码:

public class PaddedButtonRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
            {
                var button = (PaddedButton)Element;
                UpdatePadding();
            }
        }

        protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);
            if (e.PropertyName == nameof(PaddedButton.Padding))
            {
                UpdatePadding();
            }
        }

        private void UpdatePadding()
        {
            var element = Element as PaddedButton;
            if (element != null)
            {
                Control.SetPadding(
                    (int)element.Padding,
                    (int)element.Padding,
                    (int)element.Padding,
                    (int)element.Padding);
            }
        }

    }

enter image description here

这是我正在使用的iOS按钮:

public class PaddedButtonRenderer : ButtonRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
            {
                var button = (PaddedButton)Element;

                Control.ContentEdgeInsets = new UIEdgeInsets((nfloat)button.Padding, (nfloat)button.Padding, (nfloat)button.Padding, (nfloat)button.Padding);
            }
        }
    }

enter image description here

有什么建议吗?我开始认为填充是在Android上改变的错误属性。感谢。

1 个答案:

答案 0 :(得分:0)

  

使用Android Xamarin上的Image将按钮添加到按钮渲染器

我测试了你的代码,它没有用,但是你可以参考@ Dbl&#39; Answer,它在AndroidiOS都可以正常工作。

首先,确保您已在Padding中定义PaddedButton

public class EnhancedButton : Button
{ 
    public static BindableProperty PaddingProperty = BindableProperty.Create(nameof(Padding), typeof(Thickness), typeof(EnhancedButton), default(Thickness), defaultBindingMode: BindingMode.OneWay);

    public Thickness Padding
    {
        get { return (Thickness)GetValue(PaddingProperty); }
        set { SetValue(PaddingProperty, value); }
    }
}

其次,在UpdatePadding()方法中,当您使用this.Control.SetPadding()时,请修改您的代码:

private void UpdatePadding()
{
    var element = this.Element as EnhancedButton;
    if (element != null)
    {
        this.Control.SetPadding(
            (int)element.Padding.Left,
            (int)element.Padding.Top,
            (int)element.Padding.Right,
            (int)element.Padding.Bottom
        );
    }
}