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

            if (e.NewElement != null)
            {
                formControl = (Element as EntryUnderline);

                var editText = (EditText)Control;
                editText.EditorAction += (obj, act) =>
                {
                    formControl?.NextFocus?.Invoke();
                };
                editText.Touch += (a, aa) =>
                {
                    aa.Handled = false;
                    var w  = editText.Width;
                    var wl = editText.CompoundPaddingLeft;
                    var wr = w - editText.CompoundPaddingRight;
                    var x  = aa.Event.GetX();
                    if (wr < x && aa.Event.Action == Views.MotionEventActions.Down)
                    {
                        if (formControl.PasswordRevealEnabled)
                        {
                            formControl.IsPassword = !formControl.IsPassword;
                            var rightDrawable = formControl.IsPassword == true?GetDrawable("passwordeye.png") : GetDrawable("passwordeyeslash.png");

                            editText.SetCompoundDrawablesWithIntrinsicBounds(GetDrawable(formControl.Icon)?.Target as Drawable, null, rightDrawable?.Target as Drawable, null);
                            editText.CompoundDrawablePadding = 20;
                        }
                    }
                };

                if (formControl != null && formControl.IsPassword && formControl.PasswordRevealEnabled)
                {
                    var size          = editText.TextSize;
                    var rightDrawable = formControl.IsPassword == true?GetDrawable("passwordeye.png") : null;

                    editText.SetCompoundDrawablesWithIntrinsicBounds(GetDrawable(formControl.Icon)?.Target as Drawable, null, rightDrawable?.Target as Drawable, null);
                    editText.CompoundDrawablePadding = 20;
                    editText.Gravity = Views.GravityFlags.Bottom;
                }
                if (formControl != null && formControl.EntryColor != null)
                {
                    editText.Background.Mutate().SetColorFilter(formControl.EntryColor.ToAndroid(), Graphics.PorterDuff.Mode.SrcAtop);
                }

                if ((Control != null) & (e.NewElement != null))
                {
                    var entryExt = (e.NewElement as EntryUnderline);
                    Control.ImeOptions = entryExt.ReturnKeyType.GetValueFromDescription();
                    Control.SetImeActionLabel(entryExt.ReturnKeyType.ToString(), Control.ImeOptions);
                }

                if (!string.IsNullOrEmpty(e.NewElement?.StyleId) && Control != null)
                {
                    var fileName = e.NewElement.StyleId + ".ttf";
                    if (Resources.Assets.List("").Contains(fileName))
                    {
                        var font = Graphics.Typeface.CreateFromAsset(Forms.Context.ApplicationContext.Assets, fileName);
                        Control.Typeface = font;
                    }
                }
            }
        }
        protected override void OnElementChanged(ElementChangedEventArgs <Entry> e)
        {
            base.OnElementChanged(e);

            if (Control != null && Element != null)
            {
                Control.BorderStyle = UITextBorderStyle.None;

                formControl = (Element as EntryUnderline);
                if ((Control != null) & (formControl != null))
                {
                    var returnType = formControl.ReturnKeyType;

                    if (this.Element.Keyboard == Keyboard.Numeric || this.Element.Keyboard == Keyboard.Telephone)
                    {
                        this.AddAccessoryButton(returnType);
                    }
                    else
                    {
                        Control.ReturnKeyType = returnType.GetValueFromDescription();
                    }
                }

                ((UITextField)Control).ShouldReturn = (textField) =>
                {
                    formControl?.NextFocus?.Invoke();
                    return(true);
                };

                controlColor = formControl.EntryColor.ToCGColor();

                var ctrl = (UITextField)Control;
                ctrl.TextColor = formControl.EntryColor.ToUIColor();
                ctrl.TintColor = formControl.EntryColor.ToUIColor();

                var    fontSize                  = ctrl.Font.PointSize;
                var    iconHeight                = fontSize + 9; // UIScreen.MainScreen.Bounds.Height * .03;
                var    passwordIconAdder         = 2;
                var    passwordIconPaddingHeight = 2;
                var    passwordIconHeight        = iconHeight + passwordIconAdder;
                var    passwordIconPaddingWidth  = 10;
                var    iconPadding               = passwordIconAdder / 2 + passwordIconPaddingHeight;
                nfloat iconFrameHeight           = 0;
                nfloat iconPasswordFrameHeight   = 0;

                if (formControl.Icon != null)
                {
                    if (formControl.Icon.IndexOf(".png", StringComparison.InvariantCultureIgnoreCase) == -1)
                    {
                        formControl.Icon = formControl.Icon + ".png";
                    }

                    imgView       = new UIImageView(new CGRect(0, 0, (iconHeight), (iconHeight)));
                    imgView.Image = new UIImage(formControl.Icon).ChangeImageColor(formControl.PlaceholderColor.ToUIColor());

                    Resize(imgView, fontSize, fontSize);

                    var paddingView = new UIView(new CGRect(0, 0, (iconHeight + 4), (iconHeight + iconPadding)));
                    iconFrameHeight = paddingView.Frame.Height;

                    paddingView.AddSubview(imgView);
                    ctrl.LeftViewMode = UITextFieldViewMode.Always;
                    ctrl.LeftView     = paddingView;
                }
                if (formControl.IsPassword && formControl.PasswordRevealEnabled)
                {
                    var imgView = new UIImageView(new CGRect(0, 0, (passwordIconHeight + 10), (passwordIconHeight + 10)));
                    imgView.Image = new UIImage("passwordeye.png").ChangeImageColor(formControl.EntryColor.ToUIColor());

                    Resize(imgView, passwordIconHeight + passwordIconPaddingWidth, passwordIconHeight);

                    var paddingView = new UIView(new CGRect(0, 0, (passwordIconHeight + passwordIconPaddingWidth), (passwordIconHeight + passwordIconPaddingHeight + 10)));
                    iconPasswordFrameHeight = paddingView.Frame.Height;

                    var btn = new UIButton(paddingView.Frame);
                    btn.AddSubview(imgView);
                    btn.TouchUpInside += (ee, aa) =>
                    {
                        formControl.IsPassword = !formControl.IsPassword;
                        var fileName = formControl.IsPassword ? "passwordeye.png" : "passwordeyeslash.png";
                        imgView.Image = new UIImage(fileName).ChangeImageColor(formControl.EntryColor.ToUIColor());
                    };
                    paddingView.AddSubview(btn);
                    ctrl.RightViewMode = UITextFieldViewMode.Always;
                    ctrl.RightView     = paddingView;
                    ctrl.RightView.UserInteractionEnabled = true;

                    Control.SpellCheckingType      = UITextSpellCheckingType.No;                            // No Spellchecking
                    Control.AutocorrectionType     = UITextAutocorrectionType.No;                           // No Autocorrection
                    Control.AutocapitalizationType = UITextAutocapitalizationType.None;                     // No Autocapitalization
                }
                formControl.HeightRequest = iconFrameHeight > iconPasswordFrameHeight ? iconFrameHeight : iconPasswordFrameHeight;
            }
        }