动态修改EditText输入键盘并隐藏或显示密码

做登录或转账系统的人会碰到需要输入密码的情况,而且可能会要求有时明文显示,有时密文显示。如何通过代码来控制呢?


下面的xml定义了一个输入框EditText,默认是系统键盘: 

            <EditText
                android:id="@+id/inputview"
                style="@style/Style_Input"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:maxLength="16"
                android:padding="10dp"
                android:singleLine="true"
                android:textCursorDrawable="@null"
                android:visibility="visible" >
            </EditText>

通过下面的代码改变输入类型:

	@SuppressLint("InlinedApi")
	public void setValueType(ValueType valueType) {
		this.valueType = valueType;
		switch(valueType) {
		case EEditPwdNum:
			if (showPwd) {
			    // 显示密码 
				inputView.setInputType(InputType.TYPE_CLASS_NUMBER);
				inputView.setTransformationMethod(android.text.method.HideReturnsTransformationMethod.getInstance()); //数字
		    } else {
			    // 隐藏密码    3.0版才开始支持
				if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB) {
					inputView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); //字符
				} else {
					inputView.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
					//setTransformationMethod 则可以支持将输入的字符转换,包括清除换行符、转换为掩码
					inputView.setTransformationMethod(android.text.method.PasswordTransformationMethod.getInstance());
				}
			}
			break;
		case EEditPwdTxt:
			if (showPwd) {
			    // 显示密码 
				inputView.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); //字符
		    } else {
			    // 隐藏密码    
				inputView.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); //字符  
			}
			break;
		case EText:
		default:
			break;		
		}
	}

这里需要注意的是,数字密码到android3.0(android.os.Build.VERSION_CODES.HONEYCOMB)才获得支持,对于3.0以下的版本,通过代码改变的话,还是需要用字符密码。

对于数字密码还有一种方法是设置为字符密码,但是对键盘显示进行过滤,只显示数字。如:

String digits = "0123456789";

DigitsKeyListener digitsKeyListener = DigitsKeyListener.getInstance(digits);

inputview.setKeyListener(digitsKeyListener);

还可以通过代码对EditText做更多的控制。


猜你喜欢

转载自blog.csdn.net/xujunfeng000/article/details/38896439