做登录或转账系统的人会碰到需要输入密码的情况,而且可能会要求有时明文显示,有时密文显示。如何通过代码来控制呢?
下面的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做更多的控制。
时间: 2024-11-08 23:31:35