我收到奇怪的错误
我在“密码”字段中有一个Edittext
<EditText
android:id="@+id/etNewPassword"
style="@style/EditTextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/hint_new_password"
android:inputType="textPassword|textNoSuggestions"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^*"
android:maxLength="16"
android:textSize="14dp" />
假设我要在那个editText字段中输入 Password @ 123 。 它不会输入@之后的值。输入@之后便失去了焦点 然后再次需要单击相同的EditText并输入值123。
但是如果我键入@ 123,它可以工作。即使我输入@Pass也可以。 当我尝试使Letters-SpecialCharacter-numbers组合时,它仅不起作用。 它仅在某些设备上发生。
这是我的Java代码。
etPassword.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
String str = "";
@Override
public void afterTextChanged(Editable s) {
String text = s.toString();
str = s.toString();
if (etPassword.getText().toString().length() > 0 && etPassword.getText().toString().equals(" ") && etPassword.getText().toString().equals("^[@.#$%^&*_&\\\\\\\\]+$")) {
etPassword.setText("");
} else {
if (Utils.validateNotBlank(etPassword.getText().toString())) {
Pattern p = Pattern.compile("[A-Za-z0-9]+");
Matcher m = p.matcher(text);
//boolean b = m.matches();
if (some_ID_validation) {
String editTextString = etPassword.getText().toString();
boolean spaceExist = false, specialExist = false;
if (editTextString.contains(" ")) {
text = etPassword.getText().toString().replaceAll(" ", "");
if (!str.equals(text)) {
str = text;
spaceExist = true;
etPassword.setText(text);
etPassword.setSelection(text.length());
}
}
if (!m.matches()) {
text = etPassword.getText().toString().replaceAll("[^a-zA-Z0-9]+", "");
if (!str.equals(text)) {
specialExist = true;
str = text;
etPassword.setText(text);
etPassword.setSelection(text.length());
}
}
Pattern p = Pattern.compile("[^-\\s]");
Matcher m = p.matcher(text);
boolean b = m.matches();
if (etPassword.getText().toString().contains(" ") && !b) {
text = text.replaceAll(" ", "");
Util.showToast("Spaces not allowed in password field", activity);
if (!str.equals(text)) {
str = text;
etPassword.setText(text);
etPassword.setSelection(text.length());
}
}
if (text.length() > 0) {
//setPasswordStrengthMsg(Util.getPasswordStrength(text));
} else {
if (!str.equals(text)) {
str = text;
etPasswordStrength.setText("");
}
}
}
}
});
}
仅在某些手机上不起作用
答案 0 :(得分:0)
请在您的Edittext
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789~!@#$%^*"
答案 1 :(得分:0)
同时删除XML的输入类型和数字属性