我需要制作一个只接受一个字符且只接受字符(字母/字母)的EditText
。如果用户输入其他字符,则应替换现有字符(如使用1个允许符号覆盖文本输入的方法)。
我知道如何设置属性中文本的最大长度。但是,如果我设置它 为1,然后在用户删除之前不能插入其他字符 现有的。但我想用输入的新替换现有的char 一个自动无需手动删除。怎么做?
我知道如何将属性设置为仅允许EditText
中的数字,但我知道
无法弄清楚如何只允许chars。所以第二个问题是如何仅允许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字符大小EditText
,但我希望它有1个字符大小。它允许输入除字母之外的任何内容(字符/字母),我只想要字符。
使用 sgarman 和Character.isLetter()
函数提供的建议,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个符号大小的EditText
?
答案 0 :(得分:11)
你可以将这一行添加到你的布局xml文件中,android会为你做这些事情
android:maxLength="1"
肯定你应该把它作为属性添加到editText elemet,例如
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLength="1" >
我遇到了同样的问题并发现这个更简单的解决方案,我知道这是一个老问题,但我决定将我的答案放在那些打开这个链接的人身上。
我不应该忘记感谢blog的所有者,我引用了答案!
答案 1 :(得分:3)
尝试:
s.delete(0, 1);
Selection.setSelection(s, s.length());
答案 2 :(得分:2)
我想做同样的事情,我在afterTextChanged(Editable s)中使用了你的代码,并在editText上设置了一个这样的过滤器。
CREATE TABLE DEPT(
deptno number(2) NOT NULL,
DNAME varchar2(13)
);
CREATE TABLE EMP(
EMPNO number(4) NOT NULL,
ENAME varchar2(13),
DEPTNO NUMBER(2) NOT NULL (this is referencing DEPT (DEPTNO)
);
它按我们的意愿工作。