본문 바로가기
개발/안드로이드

TextWatcher 설명

by darksilber 2013. 10. 9.
반응형

출처 - http://blog.naver.com/PostView.nhn?blogId=sukuns&logNo=70114459329

 

에디트 텍스트 안의 글자 수를 셀때 가장 중요한 역할을 하는 것은 바로 TextWatcher라는 인터페이스이다

 

에디트텍스트는 사용자가 입력한 문자열의 상태가 바뀌는 것을 에디트텍스트 밖으로 알리기 위해 TextWatcher 객체를 addTextChangedListener()메서드의 인자로 사용한다.

 

...(생략)..

TextWatch watch = new TextWatcher(){

@Override

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

 CharSequence s : 현재 에디트텍스트에 입력된 문자열을 담고 있다.

 int start : s 에 저장된 문자열 내에 새로 추가될 문자열의 위치값을 담고있다.

 int count : s 에 담긴 문자열 가운데 새로 사용자가 입력할 문자열에 의해 변경될 문자열의 수가 담겨있다.

  int after : 새로 추가될 문자열의 수

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count){

 CharSequence s : 사용자가 새로 입력한 문자열을 포함한 에디트텍스트의 문자열이 들어있음

 int start : 새로 추가된 문자열의 시작 위치의 값 

int before : 새 문자열 대신 삭제된 기존 문자열의 수가 들어 있다

int count : 새로 추가된 문자열의 수가 들어있다.

}

@Override

public void afterTextChanged(Editable s){}

...(생략)..

Edittext editext = (EditText)findViewById(R.id.edittext);

edittext.addTextChangedListener(watch);

 

}

 



상위 코드가 실행되면 에디트 텍스트 문자 입력 상태가 변경될 때마다 beforeTextChanged().

onTextChanged(),afterTextChanged() 메서드를 순서대로 하나씩 호출한다.

즉, 사용자가 키보드에서 글자 한나를 누른 뒤에 손가락을 떼면 그 사이에 아래와 같은 순서를 거쳐서 글자 하나가 입력된다.

 

예 :

abcde 라는 문자열이 있다.

 이때 cde를 선택한다음

abcde

키보드에서 t를 찾아 누르면 에디트텍스트 내 문자열은 다음과같이 

abt 로 변한다

beforeTextChanged()

CharSequence s : abcde (에디트 텍스트에 들어있던 문자열

int start : (abced에서 변경될 텍스트가 c에서 시작하므로 start 값은 2 이다. 참고로 첫 문자열 a 는 0, b는 1)

int count : 3 (cde를 선택했으므로 cde의 길이는 3)

int after : 1(t가 입력되었으므로 t의 길이 1)

 

onTextChanged()

CharSequence s : abt (병경된 후 에디트 텍스트 내의 문자열 abt)

int start : 2(t는 a와 b다음이므로  위치 값은 2)

int before : 3(처음 abced에서 cde가 대신에 t 가 들어왔으므로 ced의 길이인3)

int count : 1 (새로 추가되었으므로 t의 길이 1)

 

반응형

댓글