图像是在Android的选择器自定义渲染中重叠文本

时间:2018-02-06 11:00:34

标签: xamarin.forms custom-controls picker

我为android创建了自定义渲染器选择器。但箭头图像是重叠的选择器文本。如下面的截图所示

enter image description here

这是我的代码

 public class AndroidCutomPicker : PickerRenderer
{
    protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Picker> e)
    {
        base.OnElementChanged(e);

        if (Control != null && this.Element != null)
        {
            Control.Background = AddPickerStyles();
            Control.SetLines(1);
            //Control.TextSize *= 0.25f;
        }

    }

    public LayerDrawable AddPickerStyles()
    {
        ShapeDrawable border = new ShapeDrawable();
        border.Paint.Color = Android.Graphics.Color.Gray;
        border.SetPadding(10, 10, 10, 10);
        border.Paint.SetStyle(Paint.Style.Stroke);

        Drawable[] layers = { border, GetDrawable() };
        LayerDrawable layerDrawable = new LayerDrawable(layers);
        layerDrawable.SetLayerInset(0, 0, 0, 0, 0);

        return layerDrawable;
    }

    private BitmapDrawable GetDrawable()
    {
        var drawable = ContextCompat.GetDrawable(this.Context, Resource.Drawable.dropdownarrow);
        var bitmap = ((BitmapDrawable)drawable).Bitmap;

        var result = new BitmapDrawable(Resources, Bitmap.CreateScaledBitmap(bitmap, 70, 70, true));
        result.Gravity = Android.Views.GravityFlags.Right;

        return result;
    }

}

请帮忙。 谢谢

1 个答案:

答案 0 :(得分:0)

面对同样的问题并找到这个问题,但最后我找到了一个解决方案,在你想要的地方添加一个填充,填充与元素的大小有关,所以我就这样做了

 this.Control.SetPadding((int)(element.Width / 5), Control.PaddingTop, Control.PaddingRight,         Control.PaddingBottom);

但是如果你有一个特定的常量绑定,你可以这样做

 this.Control.SetPadding(Control.PaddingLeft+XXX, Control.PaddingTop+xxx, Control.PaddingRight+xxx,         Control.PaddingBottom+xxx);