在 Xamarin.Forms 中输入自定义渲染器(为 Android 添加所有边框)

Entry Custom Renderer(add all borders for Android) in Xamarin.Forms

我有一个问题。我需要使用 Xamarin.Forms 将所有边框添加到 Android 中的条目。我在 PCL 中创建了渲染器 class 并在 xaml 文件中引用了它。然后我在 Android 项目中为渲染器创建了特定的 class。 我有这个:

[assembly: ExportRenderer (typeof(EntryCustom), ypeof(EntryRendererCustom))]
namespace InstagramApp.Droid.Renderers
{
 public class EntryRendererCustom : EntryRenderer
 {
    protected override void OnElementChanged(ElementChangedEventArgs<Entry>, e)
    {
        base.OnElementChanged(e);

        if(Control != null)
        {

        }
    }

  }
}

现在我必须在 IF 语句中添加代码,但我是 xamarin 和渲染器的新手。有人能帮我吗?如果有人还可以向我解释一些有关如何处理自定义渲染器的基础知识,那对我来说可能是黄金。谢谢大家!

你在xamarin的页面中有很多自定义渲染的例子。

这里有一个很长的解释: https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/custom-renderer/

这是一个混合网络视图的示例:

https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/custom-renderer/hybridwebview/

要了解如何使用客户渲染器,有很多关于此的书面教程和视频,所以最好自己检查一下,

还有其他无需使用自定义渲染器即可添加边框的方法,这取决于您在说边框时想到的图像是什么

  1. 将条目放入框架中
  2. 将条目放在 boxView 上方,这样您就可以更好地控制 "Border" 例如厚度、不透明度甚至动画(也许您希望边框闪烁)

要执行第二种方法,我会像这样使用网格

<Grid>
   <BoxView Color="Blue" />
   <Entry/>
</Grid>

这里的顺序在网格中很重要,对于这种情况,先定义的元素放在下面。另一个明显的一点是 BoxView 的高度和宽度应该比 Enrty 的略大,框越大边框越粗(我还在谈论这里的代码;))

这是你可以做到的:

[assembly: ExportRenderer(typeof(Entry), typeof(EntryRendererImplementation))]
namespace MyProject.Droid.Renderers
{
    public class EntryRendererImplementation : EntryRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
        {
            base.OnElementChanged(e);
            if (Control != null)
            {
                Control.Background = this.Resources.GetDrawable(Resource.Drawable.RoundedCornerEntry);
                Control.SetPadding(10,10,10,3);
            }
        }
    }
}

您必须在您的 android 项目 Resources/drawable/RoundedCornerEntry.xml 中创建此文件

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:state_focused="true" >
    <shape android:shape="rectangle">
      <gradient
          android:startColor="@color/entry_background"
          android:endColor="@color/entry_background"
          android:angle="270" />
      <stroke
          android:width="1dp"
          android:color="@color/entry_border" />
      <corners
          android:radius="6dp" />
    </shape>
  </item>
  <item>
    <shape android:shape="rectangle">
      <gradient
          android:startColor="@color/entry_background"
          android:endColor="@color/entry_background"
          android:angle="270" />
      <stroke
          android:width="1dp"
          android:color="#c6c6c6" />
      <corners
          android:radius="6dp" />
    </shape>
  </item>
</selector>

当然,您需要更新您的 Resources/values/colors.xml 文件 像 :

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <color name="entry_background">#ffffff</color>
  <color name="entry_border">#BDBDBD</color>
</resources>

给你!