我需要制作一个EditText
只接受一个字符且只接受一个字符(字母/字母)。如果用户输入其他字符,它应该替换现有的字符(例如用 1 个允许的符号覆盖文本输入的方法)。
我知道如何在属性中设置文本的最大长度。但是,如果我将其设置为 1,则在用户删除现有字符之前无法插入其他字符。但是我想用新输入的字符自动替换现有的字符,而无需手动删除。怎么做?
我知道如何将属性设置为只允许 中的数字
EditText
,但我不知道如何只允许字符。所以第二个问题是如何只允许输入字符EditText
?
目前我正在使用EditText
带有以下代码的最大文本大小= 2:
final EditText editLetter = (EditText)findViewById(R.id.editHouseLetter);
editLetter.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
if (s!=null && s.length()>1){
editLetter.setText(s.subSequence(1, s.length()));
editLetter.setSelection(1);
}
}
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
关键是,当用户输入第二个字符时,应该删除第一个字符。将文本大小设置为 2 允许用户在输入一个字符后输入另一个字符。
我真的不明白它是如何工作的,但它确实:)。此外,我不得不将光标指向EditText
最后一个位置,因为它总是会转到开头,这使得根本无法输入任何内容。也不明白这是为什么。
这个解决方案的要点是它有一个 2-chars 大小EditText
,但我希望它是 1-char 大小。它允许输入除字母(字符/阿尔法)之外的任何内容,我只想要字符。
使用sgarman和Character.isLetter()
function 提供的建议,afterTextChanged
方法现在看起来像这样:
public void afterTextChanged(Editable s) {
int iLen=s.length();
if (iLen>0 && !Character.isLetter((s.charAt(iLen-1)))){
s.delete(iLen-1, iLen);
return;
}
if (iLen>1){
s.delete(0, 1);
}
}
我发现Selection.setSelection
在这种情况下不需要使用。现在它有一个过滤器,只允许输入字母。这几乎就是我想要的答案。剩下的唯一一件事是如何对 1-symbol sized 做同样的事情EditText
?