在入口视图中编写文本时强调 - xamarin,表单android

时间:2016-03-19 20:14:24

标签: android xamarin.forms

当我在xamarin.forms的条目视图中写文本时,我总是在文本下面加下划线

我搜索所有网络以寻求解决方案 - 将背景更改为null或透明但是它不起作用。

还有其他解决方案吗?

2 个答案:

答案 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"。这是输出: no underline

现在将下划线属性设置为true:

<local:CustomEntry Text="Test text" WidthRequest="250" HorizontalOptions="Start" HasUnderline="True" />

with underline

最后带有边框:

<local:CustomEntry Text="Test text" WidthRequest="250" HorizontalOptions="Start" BorderColor="Purple" />

with border

注意,我没有在xaml中指定宽度,但是边框仍然出现。这是因为我在Android自定义渲染器中将默认宽度设置为1。但是您可以像这样BorderThickness="6"来设置较粗的宽度,或者根据需要修改默认行为。

最后一点:我在该项目中使用的命名空间是“ CustomizedControl”,因此您当然需要用您的命名空间替换“ CustomizedControl”。