출처 - 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)
[출처] TextWatcher 인터페이스를 사용한 글자 수 세기|작성자 콰이콰이
'개발 > 안드로이드' 카테고리의 다른 글
Google Expansion File 설명(확장 파일) (0) | 2013.11.12 |
---|---|
[Android]Shape 요소 (0) | 2013.11.05 |
하나의 TextView에서 여러가지 글자색과 스타일 사용하기 (0) | 2013.07.24 |
Android property animation (0) | 2013.06.03 |
안드로이드의 파일 입/출력에 필요한 경로를 얻는 방법 총정리! (0) | 2013.01.24 |
댓글