gpt4 book ai didi

java - 在android中为编辑文本使用输入过滤器

转载 作者:行者123 更新时间:2023-12-02 04:52:55 30 4
gpt4 key购买 nike

我正在为我有以下要求的编辑文本使用输入过滤器:

1)第一个字符不能是数字2) 从第二个字符开始可以是字母、数字、下划线和点

我从一个帖子中得到了以下代码:

filter_username = new InputFilter() { 
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
boolean keepOriginal = true;
sb = new StringBuilder(end - start);
for (int i = start; i < end; i++) {

char c = source.charAt(i);
// testString.append(c);
if (isCharAllowed2(c)) // put your condition here
sb.append(c);
else
keepOriginal = false;
}
if (keepOriginal)
return null;
else {
if (source instanceof Spanned) {
SpannableString sp = new SpannableString(sb);
TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0);
return sp;
} else {
return sb;
}
}
}

private boolean isCharAllowed2(char c) {
if(sb.length()==0)
{
return Character.isLetter(c);
}
else
{
return (Character.isLetter(c)||Character.isDigit(c)||c=='_'||c=='.');
}

}

};

我只能输入字母。我认为问题出在这一行:

sb = new StringBuilder(end - start);

每次我按下 key 时,都会创建一个新的 Stringbuilder 对象。因此它的长度将为零,并且只返回字母的第一个条件。

所以我想到将 stringbuilder 设置为另一个变量。它部分起作用但是当我按退格键并清除文本时,新变量的值也必须被清除。我该如何修复它?

最佳答案

尝试使用 textwatcher 来验证输入

TextWatcher 的方法 afterTextChanged 将在每次用户输入或删除字符后调用。您可以基于(在代码中给出)验证输入,然后在用户输入无效字符时显示错误。

edittext.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

@Override
public void afterTextChanged(Editable s) {
String text = edittext.getText().toString();
String len = text.length();

if(Character.isDigit(text.charAt(0))){
//First letter is a digit. Do something
//Show an error
}

text.substring(1); //remove first character from string

if(text.matches("^[a-zA-Z0-9_.]+$"){
//contains invalid character (listed by you)
//it contains a character among a-z, A-Z, 0-9, _ or .
//show an error
}

}
});

因此,如果您发现任何无效字符,您可以向用户显示错误并阻止他继续。

关于java - 在android中为编辑文本使用输入过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26081488/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com