Activity.xml
<EditText
android:id="@+id/et_pwd"
android:layout_width="300dp"
android:layout_height="37dp"
android:layout_marginBottom="15dp"
android:drawableLeft="@drawable/icon_password"
android:hint="Password"
android:inputType="textPassword"
android:maxLength="20"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" />
按钮OnClickListner
if (et_password.getInputType() != (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD)) {
et_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
} else {
et_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
}
首先,我在EditText上设置数字,如果我单击一个按钮,它会实现上面的代码,该代码会更改其inputType。在我更改inputType之前,它的数字正常工作。但是,在更改其inputType之后,由于某些原因,其数字不起作用。它允许输入特殊字符。如何改进我的代码才能使其正常工作?
答案 0 :(得分:0)
此代码将纯文本更改为密码文本和Vise-Versa。
public void onClick(View view) {
if(inputPassword.getInputType() == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
inputPassword.setInputType( InputType.TYPE_CLASS_TEXT |
InputType.TYPE_TEXT_VARIATION_PASSWORD);
}else {
inputPassword.setInputType( InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
}
inputPassword.setSelection(inputPassword.getText().length());
}
并将此过滤器代码用于数字。
InputFilter filter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
for (int i = start; i < end; i++) {
if (!Character.isLetterOrDigit(source.charAt(i))) {
return "";
}
}
return null;
}
};
edit.setFilters(new InputFilter[] { filter });