Android EditText 切换密码可见状态

Android EditText 切换密码可见状态

方式1:通过设置输入框的type
	private static final int InputType_PSW_Hide    = EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD;// 129
	private static final int InputType_PSW_Visible = EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;//145
	// 如果显示时使用值=128,则此时为文本输入,并非密码输入,如果系统有安全键盘(例如 MIUI系统),则会有键盘切换

	//设置密码可见和不可见,使用条件:密码类型为 "textPassword"
	public static void setPasswordVisibilityByType(EditText editText, boolean setVisible)
	{
		if (null != editText)
		{
			int selectionEnd = editText.getSelectionEnd();
			int length       = editText.getText().toString().length();


			int type = setVisible ? InputType_PSW_Visible : InputType_PSW_Hide;
			editText.setInputType(type);
			// setInputType方法内有调用 setTransformationMethod


			editText.setSelection((Math.min(selectionEnd, length)));
			//执行上面的代码后光标会处于输入框的最前方-->重置光标位置
		}
	}

缺点:密码隐藏,有3种type: “textPassword”、“numberPassword”、“textWebPassword”
但密码显示的type只有一种:“textVisiblePassword”,对应"textPassword",所以不适合在另外两种类型的密码输入时使用

方式2:通过设置输入框的Transformation
	public static void setPasswordVisibilityByTransformation(EditText editText, boolean setVisible)
	{
		if (null != editText)
		{
			int selectionEnd = editText.getSelectionEnd();
			int length       = editText.getText().toString().length();


			if (setVisible)
			{
				//可见
				editText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
			} else
			{
				//隐藏
				editText.setTransformationMethod(PasswordTransformationMethod.getInstance());
			}


			editText.setSelection((Math.min(selectionEnd, length)));
			//执行上面的代码后光标会处于输入框的最前方-->重置光标位置
		}
	}

密码显示的样式,和方式1有区别

总结:如果是text类型密码,则使用方法1,如果是另外两种密码类型,则使用方法2

综合:

	private static final int InputType_PSW_Hide    = EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_PASSWORD;// 129
	private static final int InputType_PSW_Visible = EditorInfo.TYPE_CLASS_TEXT | EditorInfo.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;//145

	//设置密码可见
	public void setPasswordVisibility(EditText editText, boolean setVisible)
	{
		if (null != editText)
		{
			int selectionEnd = editText.getSelectionEnd();
			int length       = editText.getText().toString().length();

			int inputType = editText.getInputType();
			if (inputType == InputType_PSW_Hide || inputType == InputType_PSW_Visible)
			{
				editText.setInputType(setVisible ? InputType_PSW_Visible : InputType_PSW_Hide);
			} else
			{
				editText.setTransformationMethod(setVisible ? HideReturnsTransformationMethod.getInstance() : PasswordTransformationMethod.getInstance());
			}

			editText.setSelection((Math.min(selectionEnd, length)));
			//执行上面的代码后光标会处于输入框的最前方-->重置光标位置
		}
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值