当我在xamarin.forms的条目视图中写文本时,我总是在文本下面加下划线
我搜索所有网络以寻求解决方案 - 将背景更改为null或透明但是它不起作用。
还有其他解决方案吗?
答案 0 :(得分:1)
看看这里
http://geeks.ms/xamarinteam/2015/04/20/branding-a-xamarin-forms-app-on-android-accent-color/
你的提问有点模糊,但我认为上面的链接可以帮助你...你只需要为所有状态设置下划线颜色与背景相同或透明。
在Android 5.0设备中,使用指定的强调色,你只需改变颜色,另一只手,在机器人4中。<你需要创建一个图像
答案 1 :(得分:0)
我知道这是一个古老的问题,但是它似乎受到很多关注/询问,而且Xamarin still 尚未添加内置支持以自定义此非常基本的UI功能,因此我将在此处发布答案,希望会对您有所帮助。另外,您在网上可以找到的大多数答案(包括Microsoft文档)都向您展示了如何创建静态自定义渲染器,但是我们真正想要的是一个控件,可以像其他控件一样在共享代码中设置属性。我想出了如何做到的,所以我将在这里分享。我还包括用于设置边框颜色和宽度的属性,因为这是我们要设置的常见UI元素。
在您的共享项目中,创建一个名为CustomEntry的类(如果需要,可以稍后重命名)。
using Xamarin.Forms;
namespace CustomizedControl
{
public class CustomEntry : Entry
{
public Color BorderColor { get; set; }
public int BorderThickness { get; set; }
public bool HasUnderline { get; set; }
}
}
在您的 Android项目中创建一个名为CustomEntryAndroid的类,并粘贴以下代码:
using Android.Content;
using Android.Graphics;
using Android.Graphics.Drawables;
using CustomizedControl;
using CustomizedControl.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(CustomEntry), typeof(CustomEntryAndroid))]
namespace CustomizedControl.Droid
{
public class CustomEntryAndroid : EntryRenderer
{
public CustomEntryAndroid(Context context) : base(context)
{ }
private bool HasUnderline;
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
var element = (CustomEntry)Element;
HasUnderline = element.HasUnderline;
var BorderClr = element.BorderColor.ToAndroid();
if (HasUnderline == false)
{
GradientDrawable gd = new GradientDrawable();
gd.SetColor(Android.Graphics.Color.Transparent);
Control.SetBackgroundDrawable(gd); //this is depreciated but it doesn't matter, the new method SetBackgroud simply calls SetBackgroundDrawable
} //Else maintain default underline
if (BorderClr != Android.Graphics.Color.Transparent)
{
int borderThickness = element.BorderThickness;
if (borderThickness == 0) { borderThickness = 1; } //in case border thickness was not set then default to 1
var brdr = new ShapeDrawable(new Android.Graphics.Drawables.Shapes.RectShape());
brdr.Paint.Color = BorderClr;
brdr.Paint.SetStyle(Paint.Style.Stroke);
Control.Background = brdr;
GradientDrawable gd = new GradientDrawable();
gd.SetColor(Android.Graphics.Color.Transparent);
gd.SetStroke(borderThickness, BorderClr);
Control.SetBackground(gd);
}
}//end if
}//end OnElementChanged
}//end public class CustomEntryAndroid
}//end NameSpace
您现在可以在任何xaml页面中使用该自定义条目,并消除这样的下划线:
<local:CustomEntry HasUnderline="False" />
这是一个非常简单的内容页面,除条目外几乎没有其他内容
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:CustomizedControl"
x:Class="CustomizedControl.MainPage">
<StackLayout Padding="30">
<local:CustomEntry Text="Test text" WidthRequest="250" HorizontalOptions="Start" HasUnderline="False" />
</StackLayout>
</ContentPage>
请注意导入语句xmlns:local="clr-namespace:CustomizedControl"
。这是输出:
现在将下划线属性设置为true:
<local:CustomEntry Text="Test text" WidthRequest="250" HorizontalOptions="Start" HasUnderline="True" />
最后带有边框:
<local:CustomEntry Text="Test text" WidthRequest="250" HorizontalOptions="Start" BorderColor="Purple" />
注意,我没有在xaml中指定宽度,但是边框仍然出现。这是因为我在Android自定义渲染器中将默认宽度设置为1。但是您可以像这样BorderThickness="6"
来设置较粗的宽度,或者根据需要修改默认行为。
最后一点:我在该项目中使用的命名空间是“ CustomizedControl”,因此您当然需要用您的命名空间替换“ CustomizedControl”。