在 android 5 上替代 LayerDrawable.SetPadding [英] Alternative to LayerDrawable.SetPadding on android 5
问题描述
我一直在使用此代码在 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屋!