在 android 5 上替代 LayerDrawable.SetPadding [英] Alternative to LayerDrawable.SetPadding on android 5

查看:20
本文介绍了在 android 5 上替代 LayerDrawable.SetPadding的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在使用此代码在 Android 上运行的 Xamarin.Forms 中创建自定义选择器.

I've been using this code to create a custom picker in Xamarin.Forms running on Android.

但在运行 Android 5.1 的设备上调用 SetPadding 时失败.

But it fails at runtime on devices with Android 5.1 on the call to SetPadding.

NoSuchMethodError: 没有非静态方法 "Landroid/graphics/drawable/LayerDrawable;.setPadding

NoSuchMethodError: no non-static method "Landroid/graphics/drawable/LayerDrawable;.setPadding

对于 Android 6 (API 23) 中似乎引入的内容,是否有替代方案?

Is there an alternative for what seems to have been introduced in Android 6 (API 23)?

修复了失败代码的链接.

Fixed the link to the failing code.

推荐答案

你可以创建一个继承自 LayerDrawable 的子类,覆盖 BottomPadding , TopPadding , LeftPadding , RightPadding ,虽然这不是一个顺利的解决方案..

You could create a subclass inherit from LayerDrawable , override the getter method of BottomPadding , TopPadding , LeftPadding , RightPadding , though it's not a smooth solution ..

 public class MyLayer : LayerDrawable
    {
        public MyLayer(Drawable[] layers):base(layers)
        {
            
        }

        public override int BottomPadding
        {
            get
            {
                return 10;
            }       
        }

        public override int TopPadding
        {
            get
            {
                return 10;
            }
        }

        public override int LeftPadding 
        {
            get
            {
                return 10;
            }
        }

        public override int RightPadding 
        {
            get
            {
                return 10;
            }
        }
    }


  public MyLayer AddPickerStyles(string imagePath)
    {
        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(imagePath) };
        MyLayer layerDrawable = new MyLayer(layers);
        layerDrawable.SetLayerInset(0, 0, 0, 0, 0);

        return layerDrawable;
    }

这篇关于在 android 5 上替代 LayerDrawable.SetPadding的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆