因此Entry没有填充属性,但条目上有一些明确的填充。
实施例
我将“密歇根”条目与下面的“选择”标签对齐,但是它们看起来不对齐,因为条目左边有一些填充。我尝试了条目确实具有的margin属性,但它没有用。
如何摆脱差距/填充?
我想补充一点,添加偏移边距不起作用。
答案 0 :(得分:5)
您需要为条目创建自定义渲染器,并使用SetPadding方法将Android EditText的PaddingLeft设置为0。
摘自Android上的CustomEntryRenderer:
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (e.NewElement == null) return;
Control.SetPadding(0, Control.PaddingTop, Control.PaddingRight, Control.PaddingBottom);
}
答案 1 :(得分:0)
对我来说,有效的自定义渲染为:
[assembly: Xamarin.Forms.ExportRenderer(typeof(MyApp.Views.Controls.CustomEntry), typeof(MyApp.Droid.Views.Controls.CustomRenderer.Android.CustomEntryRenderer))]
namespace MyApp.Droid.Views.Controls
{
namespace CustomRenderer.Android
{
public class CustomEntryRenderer : EntryRenderer
{
public CustomEntryRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
Control.Background = new ColorDrawable(Color.Transparent);
Control.SetPadding(0, 0, 0, 0);
Control.Gravity = GravityFlags.CenterVertical | GravityFlags.Left;
Control.TextAlignment = TextAlignment.Gravity;
}
}
}
}
}
答案 2 :(得分:0)
我在同样的问题上苦苦挣扎,但是我通过创建一个自定义Entry类型解决了这个问题,该类型将Padding属性添加到Xamarin Forms的Entry中:
public class CustomEntry : Entry
{
public static readonly BindableProperty PaddingProperty =
BindableProperty.Create(
nameof(Padding),
typeof(Thickness),
typeof(CustomEntry),
new Thickness());
public Thickness Padding
{
get { return (Thickness)this.GetValue(PaddingProperty); }
set { this.SetValue(PaddingProperty, value); }
}
}
然后,我像Danilow所建议的那样,使用自定义渲染器渲染CustomEntry,唯一的区别是,我从CustomEntry中读取了PaddingProperty并将其应用于CustomEntryRenderer中。
[assembly: ExportRenderer(typeof(Entry), typeof(CustomEntryRenderer))]
namespace CrossPlatformLibrary.Forms.Android.Renderers
{
public class CustomEntryRenderer : EntryRenderer
{
public CustomEntryRenderer(Context context) : base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (e.NewElement == null)
{
return;
}
if (this.Element is CustomEntry customEntry)
{
var paddingLeft = (int)customEntry.Padding.Left;
var paddingTop = (int)customEntry.Padding.Top;
var paddingRight = (int)customEntry.Padding.Right;
var paddingBottom = (int)customEntry.Padding.Bottom;
this.Control.SetPadding(paddingLeft, paddingTop, paddingRight, paddingBottom);
}
}
}
}
当心::如果您想对PaddingProperty的更改做出反应,则需要扩展此代码-并且-如果您也要支持Padding属性,则需要为IOS编写自定义渲染器。
答案 3 :(得分:0)
对于需要iOS的人来说,这也是在iOS上实现的。基本上是将左视图的宽度设置为0,但是您也可以使用“ LeftViewMode”将其完全隐藏。
tbody
完整代码
switch