c# - 输入显示和隐藏密码

标签 c# xamarin xamarin.forms xamarin.ios xamarin.android

我想要一个条目在占位符之前有一个图标,在条目末尾有一个图标,以显示和隐藏条目中的文本,我使用本教程有一个带有显示和隐藏图标的条目: https://www.techierathore.com/2017/09/xamarin-forms-tip-implement-show-hide-password-using-effects/

但现在我也想在条目之前有图标,我可以通过本教程做到这一点: https://xamgirl.com/image-entry-in-xamarin-forms/

但如果我将第一个教程的效果添加到自定义条目中,则只会显示隐藏/显示图标。

有可能做我想做的事吗?

最佳答案

你可以使用 editText.SetCompoundDrawablesRelativeWithIntrinsicBounds()添加两个图标。

SetCompoundDrawablesRelativeWithIntrinsicBounds 接受四个参数,用于绘制开始、顶部、结束和底部。在第一个教程中,隐藏/显示图标添加到最后,您可以将第一个参数从 0 更改为您的 drawable。 需要修改三个地方。

例如:

public class ShowHidePassEffect : PlatformEffect
{
    protected override void OnAttached()
    {
        ConfigureControl();
    }

    protected override void OnDetached()
    {
    }

    private void ConfigureControl()
    {
        EditText editText = ((EditText)Control);
        editText.SetCompoundDrawablesRelativeWithIntrinsicBounds(Resource.Drawable.Password, 0, Resource.Drawable.ShowPass, 0);
        editText.SetOnTouchListener(new OnDrawableTouchListener());
    }
}

public class OnDrawableTouchListener : Java.Lang.Object, Android.Views.View.IOnTouchListener
{
    public bool OnTouch(Android.Views.View v, MotionEvent e)
    {
        if (v is EditText && e.Action == MotionEventActions.Up)
        {
            EditText editText = (EditText)v;
            if (e.RawX >= (editText.Right - editText.GetCompoundDrawables()[2].Bounds.Width()))
            {
                if (editText.TransformationMethod == null)
                {
                    editText.TransformationMethod = PasswordTransformationMethod.Instance;
                    editText.SetCompoundDrawablesRelativeWithIntrinsicBounds(Resource.Drawable.Password, 0, Resource.Drawable.ShowPass, 0);
                }
                else
                {
                    editText.TransformationMethod = null;
                    editText.SetCompoundDrawablesRelativeWithIntrinsicBounds(Resource.Drawable.Password, 0, Resource.Drawable.HidePass, 0);
                }
                return true;
            }
        }
        return false;
    }
}

结果是:
enter image description here

关于c# - 输入显示和隐藏密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50512908/

相关文章:

c# - 将匿名方法转换为 lambda 表达式

xamarin - 升级到 MVVMCross 4.0 后 LinkAssemblies 失败

c# - 如何在 Database.EnsureCreated() EF Xamarin.Forms 之后使用 Database.Migration()

c# - 是否可以在不包含 System.Linq 命名空间的情况下使用 Linq 和 lambda?

c# - 如何创建可以返回 double 或小数的通用 C# 方法?

c# - 错误: The operation not method is not implemented

VS2019找不到Android模拟器

c# - 当我在 Android 中通知时,如何让我的通知下拉?

c# - 如何从我的 iOS 依赖项服务 [Xamarin.Forms.iOS] 中的 Task<string> 返回值?

xamarin.forms - 在Google Play(Alpha)上上传Xamarin应用程序-未优化APK