我已经为我的应用程序创建了一个自定义呈现条目,此时只需在文本中添加填充。即使用户专注于条目,我也希望边框颜色始终为蓝色。我在Android自定义条目中获取此代码(取自here,但它不起作用,它只是添加了一个蓝色背景):
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
var view = (BlueBorderEntry)Element;
GradientDrawable gd = new GradientDrawable();
//Below line is useful to give border color
gd.SetColor(global::Android.Graphics.Color.Rgb(45, 192, 232));
this.Control.SetBackgroundDrawable(gd);
this.Control.SetPadding(40, 40, 40, 40);
this.Control.SetRawInputType(InputTypes.TextFlagNoSuggestions);
}
}
我已经探索了可能设置边框颜色的内容并找到了:
this.Control.SetCompoundDrawables();
其描述如下:
将drawable设置为显示在文本的左侧,上方,右侧和下方。
然而,在使用蓝色的Drawable传递之后,它对我的输入完全没有任何作用。
我似乎无法弄清楚如何让边框成为蓝色,如果有人可以帮助我吗?
编辑:我需要边框位于条目的底部,厚度约为5px。
您可以在没有渲染器的情况下使用框架并将条目放在框架内,并设置框架的边框颜色。这是一种简单的方法。
或者您可以修改渲染器:
public class CustomEntryRenderer : EntryRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (e.OldElement == null)
{
var nativeEditText = (global::Android.Widget.EditText)Control;
var shape = new ShapeDrawable(new Android.Graphics.Drawables.Shapes.RectShape());
shape.Paint.Color = Xamarin.Forms.Color.Red.ToAndroid();
shape.Paint.SetStyle(Paint.Style.Stroke);
nativeEditText.Background = shape;
}
}
}
通常,我不喜欢变通方法,但这太难以忽略了:
<FooLayout BackgroundColor="White">
<StackLayout BackgroundColor="Black" Padding="1">
<Entry BackgroundColor="White" />
</StackLayout>
...
</FooLayout>
FooLayout类似于任何布局
我使用了一个解决方法,我在条目下方添加了一个BoxView,其宽度与Entry相同,HeightRequest为5
<customrenderers:BlueBorderEntry x:Name="username" Text="" Placeholder="Email" WidthRequest="150" Margin="35, 0, 35, 0"/>
<BoxView WidthRequest="150" HeightRequest="5" BackgroundColor="#8ad6ea" Margin="35, 0, 35, 20"/>