【问题标题】:remove underline for material entry control in xamarin forms for android删除 Android 的 xamarin 表单中材料输入控制的下划线
【发布时间】:2020-12-07 11:01:51
【问题描述】:

我需要删除 Xamarin.Forms for Android 中材料输入控件的下划线。

我使用的是 Xamarin.Forms 版本 4.8.0.1687,在此之前,在之前的 Xamarin.Forms 版本 4.6.0.847 中,我曾经使用以下行隐藏材料条目下划线。现在,使用 4.8.0.1687 - 它无法正常工作。

Control.EditText.Background = null;
Control.EditText.SetBackgroundColor(Android.Graphics.Color.Transparent);

【问题讨论】:

  • 你的目标是哪个安卓版本?
  • 目标版本 10 并使用 android 9 设备进行检查。
  • @Dev 试试下面添加的答案

标签: android xaml xamarin xamarin.forms material-design


【解决方案1】:

在 Android 的 xamarin 表单中移除材料输入控件的下划线

您好,自定义渲染器的类型是什么?如果您使用Material Entry,则类型应为MaterialEntryRenderer

我用 4.8.0.1687 版本测试了一个基本的演示来测试这个功能,它工作正常。下面是相关代码:

[assembly : ExportRenderer(typeof(CustomEntry),typeof(CustomEntryRenderer))]
namespace TestApplication_1.Droid
{
    public class CustomEntryRenderer : MaterialEntryRenderer
    {
        public CustomEntryRenderer(Context context) : base(context) { }

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

            if (Control != null)
            {
                Control.EditText.Background = null;
                Control.EditText.SetBackgroundColor(Android.Graphics.Color.Transparent);
            }
        }
    }
}

这是工作 gif:

【讨论】:

  • 附带问题如何将屏幕录制为 gif?我尝试了模拟器中包含的那个,但它在某些页面转换期间以 1080x1920 的分辨率记录了黑屏。并且比真实的要快。
  • 我用的是licecap工具截图,你可以试试。
  • 谢谢,我试试看。
【解决方案2】:

您可以使用custom renderersmaterial visual 来实现条目下划线去除。 对于 Xamarin Forms Material Visual 4.8+,我正在使用以下代码。

Xamarin Android

条目

[assembly: ExportRenderer(typeof(Entry), typeof(EntryMaterialRendererAndroid), new[] { typeof(VisualMarker.MaterialVisual) })]
namespace XFTest.Droid.Renderers
{
    public class EntryMaterialRendererAndroid : MaterialEntryRenderer
    {
        public EntryMaterialRendererAndroid(Context context) : base(context) { }
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.BoxStrokeWidth = 0;
                Control.BoxStrokeWidthFocused = 0;
            }
        }
    }
}

【讨论】:

    【解决方案3】:
    public class BorderlessEntryRenderer : MaterialEntryRenderer
    {
        public BorderlessEntryRenderer(Context context) : base(context)
        {
        }
    
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);
    
            if (e.NewElement != null)
            {
                ViewCompat.SetBackgroundTintList(Control.EditText,ColorStateList.ValueOf(Android.Graphics.Color.Transparent));
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多