Xamarin Entry底线颜色没有变化

时间:2018-02-18 18:24:31

标签: c# android visual-studio xamarin xamarin.forms

所以我正在开发Android应用程序。现在我正在创建MainPage,我插入Entry,其中一直有底线。我预览器的底线是White,而在我的手机上,它似乎是Black

因此,要解决此问题,我决定使用渲染器,看看我是否可以修复它。 我在应用程序中创建了一个名为CustomEntryRenderer的类,它继承自Entry。 然后我在App.Android中创建了一个名为CustomEntryRednererAndroid的Class,它应该改变底部入口线的颜色。但它并没有影响它。我尝试使用我在互联网上找到的一些自定义渲染器。

例如,删除底线也不会影响程序: removing line

从MainPage.xaml进入:

<Entry 

        Grid.Row="4"
        Grid.ColumnSpan="2"
        TextColor="Silver"         
        Placeholder="Write Your nickname"
        PlaceholderColor="Silver"

        />

CustomEntryRenderer:

 public class CustomEntryRenderer : Entry
{
}

CustomEntryRendererAndroid:

[assembly: ExportRenderer(typeof(CustomEntryRenderer), typeof(MyEntryRenderer))]
namespace App3.Droid
{
public class MyEntryRenderer : EntryRenderer
{

    public MyEntryRenderer(Context context) : base(context) { }
    protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
    {
        base.OnElementChanged(e);

        if (Control == null || e.NewElement == null) return;

        if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
            Control.BackgroundTintList = ColorStateList.ValueOf(Android.Graphics.Color.White);
        else
            Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcAtop);
    }
}

}

Top answer for Android 由于某些原因CustomEntryRendererAndroid.cs我也必须使用Android.Graphic代替Xamarin.Forms.Color。但我不认为这是问题所在。

我现在已经尝试了几个小时,无法找到解决这种情况的方法。 非常感谢任何想法。

2 个答案:

答案 0 :(得分:4)

在xaml中,您使用的是默认的Entry控件,而不是您的CustomEntryRenderer,这是您的渲染器所影响的。此外,您可能希望重命名它,因为它实际上不是您的渲染器,而是您的自定义控件。

要解决您的问题,您可以将渲染器typeof(CustomEntryRenderer)更改为typeof(Entry),以便默认情况下影响应用中的所有Android条目。例如,这适用于所有条目的测试应用程序:

[assembly: ExportRenderer(typeof(Entry), typeof(MyEntryRenderer))]
namespace YourNameSpace
{
    public class MyEntryRenderer : EntryRenderer
    {
        public MyEntryRenderer(Context context) : base(context) { }

        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control == null || e.NewElement == null) return;

            if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                Control.BackgroundTintList = ColorStateList.ValueOf(Android.Graphics.Color.White);
            else
                Control.Background.SetColorFilter(Android.Graphics.Color.White, PorterDuff.Mode.SrcAtop);
        }
    }
}

另一个选项是在MainPage中切换您的xaml代码以实际使用您的自定义控件。例如,<local:CustomEntryRenderer/>

答案 1 :(得分:1)

将其添加到 Styles.xml 中将对其进行全局修复

<item name="colorControlNormal">#1BB8A3</item>"