2011-04-05 5 views
6

EditText은 문자 하나와 문자 (문자/알파) 만 허용해야합니다. 그리고 사용자가 다른 문자를 입력하면 기존 문자를 대체해야합니다 (텍스트 입력의 덮어 쓰기 방법과 같이 허용 된 기호 1 개).EditText에서 1 문자 만 허용하고 사용자가 입력 할 때 항상 덮어 쓰기

  1. 속성에 최대 텍스트 길이를 설정하는 방법을 알고 있습니다. 하지만 을 1로 설정하면 사용자가 기존 항목을 삭제하기 전에 다른 문자를 삽입 할 수 없습니다. 하지만 기존의 문자를 수동으로 삭제하지 않고 자동 입력 된 으로 바꾸고 싶습니다. 그렇게하는 방법?

  2. 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를 사용하는 것은이 경우에는 필요하지 않음을 발견했습니다 : sgarmanCharacter.isLetter() 기능에 의해 제공되는 조언을 사용

afterTextChanged 방법은 지금 이런 식으로 보인다. 이제는 문자 만 입력 할 수있는 필터가 있습니다. 거의 내가 원하는 대답입니다. 남은 유일한 것은 EditText 크기의 1 기호로 어떻게 처리할까요?

답변

3

시도 :

s.delete(0, 1); 
Selection.setSelection(s, s.length()); 
+0

(텍스트 길이 = 2) 정확히 동일합니다. 길이 = 1이면 전혀 작동하지 않습니다. ET (editLetter) 링크를 사용하지 않고 그냥 다른 방법 일뿐입니다. 끝을위한 고맙지 만 그것은 대답이 아니다. – Stan

+0

@Stan 왜 당신은 그것을 받아 들였습니까 ;-) –

+0

제 질문을 완전히 읽으십시오. 그러면 왜 그런지 알게 될 것입니다. – Stan

9

당신은 당신의 레이아웃 XML 파일이 한 줄을 추가 할 수 있습니다, 당신은 확실히

android:maxLength="1" 

당신이에 속성으로 추가해야합니다 위해 안드로이드가 물건을 할 것입니다 editText 엘레멘트 예 :

<EditText 
    android:id="@+id/editText1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:inputType="text" 
    android:maxLength="1" > 

나는이 쉬운 해결책을 발견했다. 그것은 오래된 질문이지만이 링크를 여는 사람들이 쉽게 내 대답을 올릴 수 있도록 결정했습니다.

나는 대답을 인용 한이 blog의 소유자에게 감사하는 것을 잊지 말아야한다!

+5

제 질문을 더 자세히 읽으십시오 - 제한 사항은 1 자로 제한되지 않습니다. 너의 방법은 그냥 실 거예요. – Stan

2

나는 똑같은 일을하고 싶었고 afterTextChanged (Editable s)에서 코드를 사용했고 editText에 이와 같은 필터 하나를 설정했다.

editText.setFilters(new InputFilter[] {new InputFilter.LengthFilter(2)}); 

우리가 원하는대로 작동했습니다.