Alternative to LayerDrawable.SetPadding on android 5

╄→гoц情女王★ 提交于 2020-06-29 03:59:07

问题


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

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

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

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

EDIT: Fixed the link to the failing code.


回答1:


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;
    }


来源:https://stackoverflow.com/questions/62550287/alternative-to-layerdrawable-setpadding-on-android-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!