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

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

我在使用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上改变的错误属性。谢谢。

android xamarin
1个回答
0
投票

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

我测试你的代码,它不起作用,但你可以参考@ Dbl的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
        );
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.