如何在使用 "addTextChangedListener" 和 "Character.isLetterOrDigit(s.charAt(i))" 收听时启用文本
How to enable text when listening with "addTextChangedListener" and "Character.isLetterOrDigit(s.charAt(i))"
我在用户插入非 LetterOrDigit
时禁用按钮,并在用户插入 LetterOrDigit
时启用它。
我遇到的问题是,即使用户在非 LetterOrDigit
之后插入一个字母,它也会启用它。但我只想在他删除非LetterOrDigit
字符时启用。
我的代码
name1.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) {
}
@Override
public void afterTextChanged(Editable s) {
for (int i = 0; i < s.length(); i++) {
if(name1.getText().toString().length()>16)
{
register.setClickable(false);
mistakeusername.setErrorEnabled(true);
mistakeusername.setError("You cant insert more then 16 characters");
}else {
if (!(Character.isLetterOrDigit(s.charAt(i))||Character.toString(s.charAt(i)).equals("_")))
{
register.setClickable(false);
mistakeusername.setErrorEnabled(true);
mistakeusername.setError("Only allowed Digit, Number or '_'");
}else{
register.setClickable(true);
mistakeusername.setErrorEnabled(false);
mistakeusername.setError("");
}
}
}
}
});
我认为你的问题是你应该在 for
之后 break
if(!(Character.isLetterOrDigit(s.charAt(i))||Character.toString(s.charAt(i)).equals("_")))
是正确的。
试试这个:
name1.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) {
}
@Override
public void afterTextChanged(Editable s) {
for (int i = 0; i < s.length(); i++) {
if(name1.getText().toString().length()>16)
{
register.setClickable(false);
mistakeusername.setErrorEnabled(true);
mistakeusername.setError("You cant insert more then 16 characters");
}else {
if (!(Character.isLetterOrDigit(s.charAt(i))||Character.toString(s.charAt(i)).equals("_")))
{
register.setClickable(false);
mistakeusername.setErrorEnabled(true);
mistakeusername.setError("Only allowed Digit, Number or '_'");
break;
}else{
register.setClickable(true);
mistakeusername.setErrorEnabled(false);
mistakeusername.setError("");
}
}
}
}
});
我在用户插入非 LetterOrDigit
时禁用按钮,并在用户插入 LetterOrDigit
时启用它。
我遇到的问题是,即使用户在非 LetterOrDigit
之后插入一个字母,它也会启用它。但我只想在他删除非LetterOrDigit
字符时启用。
我的代码
name1.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) {
}
@Override
public void afterTextChanged(Editable s) {
for (int i = 0; i < s.length(); i++) {
if(name1.getText().toString().length()>16)
{
register.setClickable(false);
mistakeusername.setErrorEnabled(true);
mistakeusername.setError("You cant insert more then 16 characters");
}else {
if (!(Character.isLetterOrDigit(s.charAt(i))||Character.toString(s.charAt(i)).equals("_")))
{
register.setClickable(false);
mistakeusername.setErrorEnabled(true);
mistakeusername.setError("Only allowed Digit, Number or '_'");
}else{
register.setClickable(true);
mistakeusername.setErrorEnabled(false);
mistakeusername.setError("");
}
}
}
}
});
我认为你的问题是你应该在 for
之后 break
if(!(Character.isLetterOrDigit(s.charAt(i))||Character.toString(s.charAt(i)).equals("_")))
是正确的。
试试这个:
name1.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) {
}
@Override
public void afterTextChanged(Editable s) {
for (int i = 0; i < s.length(); i++) {
if(name1.getText().toString().length()>16)
{
register.setClickable(false);
mistakeusername.setErrorEnabled(true);
mistakeusername.setError("You cant insert more then 16 characters");
}else {
if (!(Character.isLetterOrDigit(s.charAt(i))||Character.toString(s.charAt(i)).equals("_")))
{
register.setClickable(false);
mistakeusername.setErrorEnabled(true);
mistakeusername.setError("Only allowed Digit, Number or '_'");
break;
}else{
register.setClickable(true);
mistakeusername.setErrorEnabled(false);
mistakeusername.setError("");
}
}
}
}
});