EditText
은 문자 하나와 문자 (문자/알파) 만 허용해야합니다. 그리고 사용자가 다른 문자를 입력하면 기존 문자를 대체해야합니다 (텍스트 입력의 덮어 쓰기 방법과 같이 허용 된 기호 1 개).EditText에서 1 문자 만 허용하고 사용자가 입력 할 때 항상 덮어 쓰기
속성에 최대 텍스트 길이를 설정하는 방법을 알고 있습니다. 하지만 을 1로 설정하면 사용자가 기존 항목을 삭제하기 전에 다른 문자를 삽입 할 수 없습니다. 하지만 기존의 문자를 수동으로 삭제하지 않고 자동 입력 된 으로 바꾸고 싶습니다. 그렇게하는 방법?
EditText
의 숫자 만 허용하도록 속성을 설정하는 방법을 알고 있지만 은 문자 만 허용하는 방법을 알 수 없습니다. 그래서 두 번째 질문은EditText
의 문자 만 허용하는 것입니다.
현재 I는 다음 코드 최대 글자 크기 = 2와 함께 EditText
가 사용하고
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 크기를 원한다는 것입니다. 그리고 글자 (문자/알파) 이외의 다른 글자를 입력 할 수 있으며, 글자 만 원할뿐입니다.
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
를 사용하는 것은이 경우에는 필요하지 않음을 발견했습니다 : sgarman 및 Character.isLetter()
기능에 의해 제공되는 조언을 사용
는 afterTextChanged
방법은 지금 이런 식으로 보인다. 이제는 문자 만 입력 할 수있는 필터가 있습니다. 거의 내가 원하는 대답입니다. 남은 유일한 것은 EditText
크기의 1 기호로 어떻게 처리할까요?
(텍스트 길이 = 2) 정확히 동일합니다. 길이 = 1이면 전혀 작동하지 않습니다. ET (editLetter) 링크를 사용하지 않고 그냥 다른 방법 일뿐입니다. 끝을위한 고맙지 만 그것은 대답이 아니다. – Stan
@Stan 왜 당신은 그것을 받아 들였습니까 ;-) –
제 질문을 완전히 읽으십시오. 그러면 왜 그런지 알게 될 것입니다. – Stan