EditText는 TextView로부터 파생된 클래스로 TextView는 단순히 Text를 보여주는 역할을 하지만 EditText는 Text를 입력 및 수정까지 가능한 View 위젯이다.
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sample EditText" />
val editText: EditText = findViewById(R.id.editText)
val text: String = editText.text.toString()
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
val imm: InputMethodManager = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(currentFocus?.windowToken, 0)
return super.dispatchTouchEvent(ev)
}
editText
에 입력한 값을 실시간으로 관찰하면서 입력값에 따른 처리를 해야 할 때가 있다. 이때 TextWatcher
를 사용할 수 있다.
TextWatcher
는 단어 그대로 입력되는 Text를 감지하고 있다가 실시간으로 동작하는 유용한 인터페이스이다.
TextWatcher
인터페이스이기 때문에 아래 3가지 메소드를 재정의 해주어야한다.
private val textWatcher = object : TextWatcher {
override fun afterTextChanged(s: Editable?) {
}
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
}
}
beforeTextChanged(CharSequence charSequence, int i, int i1, int i2)
-텍스트가 변경되기 바로 이전에 동작하는 메소드이다.
-첫 글자 입력 시에는 반응하지 않다가 두 번째 글자가 입력되자 처음에 입력했던 글자가 텍스트뷰에 보여진다.
-그리고 입력했던 문자열들을 하나씩 지울 때마다 지우기 전의 글자가 보인다.
onTextChanged(CharSequence charSequence, int i, int i1, int i2)
-텍스트가 변경되는 동시에 동작하는 메소드다.
-onTextChanged()는 글자가 입력될 때마다 호출되서 count가 바뀐다.
-실시간으로 텍스트가 입력되거나 삭제될 때 로직을 추가하려면 해당 메소드에서 할 수도 있다.
afterTextChanged(Editable editable)
-텍스트가 변경된 이후에 동작하는 메소드다.