问题
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