<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<EditText
android:id="@+id/et1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="name"
android:inputType="text"
android:imeOptions="actionDone" />
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="값 가져오기"/>
<Button
android:id="@+id/btn2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="값 설정정하기"/>
</LinearLayout>
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 1. EditText의 문자열을 TextView로 가져오기
btn1.setOnClickListener { view ->
tv1.text = et1.text
}
// 2. 문자열을 세팅할 때는 setText를 사용한다.
btn2.setOnClickListener { view ->
et1.setText("문자열")
}
// 3. 이너 클래스 리스너를 이용해서 setOnEditorActionListener를 사용하는 방법
var listener = EnterListener()
et1.setOnEditorActionListener(listener)
// 4. 람다식을 이용해서 setOnEditorActionListener를 사용하는 방법
et1.setOnEditorActionListener { textView, i, keyEvent ->
tv1.text = et1.text
true // 람다식에서는 반환값을 이렇게.. return을 쓰지 않는다. 중요!!
}
// 5. 이너 클래스 리스너를 이용해서 Editwatcher를 사용하는 방법
var watcher = Editwatcher()
et1.addTextChangedListener(watcher)
// 6. 람다식을 이용해서 Editwatcher를 사용하는 방법
et1.addTextChangedListener(object : TextWatcher {
override fun afterTextChanged(p0: Editable?) {
}
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
tv1.text = p0
}
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
})
}
// 3. 이너 클래스 리스너를 이용해서 setOnEditorActionListener를 사용하는 방법
inner class EnterListener : TextView.OnEditorActionListener {
override fun onEditorAction(p0: TextView?, p1: Int, p2: KeyEvent?): Boolean {
tv1.text = et1.text
// 키보드 안내리겠다 하면
// return true
// 키도브 내리겠다고 하면
return false
}
}
// 5. 이너 클래스 리스너를 이용해서 Editwatcher를 사용하는 방법
inner class Editwatcher : TextWatcher {
// 문자열이 바뀌기 전
override fun afterTextChanged(p0: Editable?) {
}
// 문자열이 바뀌었을 때, 주로 이걸 사용한다.
override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
// p0는 에디트 텍스트에 들어온 문자열이다.
tv1.text = p0
}
// 문자열이 바뀐 후
override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {
}
}
}
각각에 주석을 달아놨지만 EditText는 사용법이 다양하다. 버튼을 이용해서 입력받은 문자열을 처리할 수도 있지만, imeOptions을 사용해서 입력키패드에 있는 엔터버튼을 사용해서 값을 처리할 수도 있다.
// 3. 이너 클래스 리스너를 이용해서 setOnEditorActionListener를 사용하는 방법
inner class EnterListener : TextView.OnEditorActionListener {
override fun onEditorAction(p0: TextView?, p1: Int, p2: KeyEvent?): Boolean {
tv1.text = et1.text
// 키보드 안내리겠다 하면
return true
// 키도브 내리겠다고 하면
return false
}
}
위 와 같이 imeOptions를 이용할 때 만약 엔터를 누르고 키보드를 내리고 싶다하면 false 반대라면 true를 return 하면 된다.
// 4. 람다식을 이용해서 setOnEditorActionListener를 사용하는 방법
et1.setOnEditorActionListener { textView, i, keyEvent ->
tv1.text = et1.text
true // 람다식에서는 반환값을 이렇게.. return을 쓰지 않는다. 중요!!
}
이 람다식의 경우에 자바와 다르게 return 을 쓰지 않는다는 점을 유의하자.
그 외에 TextWatcher를 통해서 EditText를 감시하면서 반응이 감지(?) 되었을 때 해당하는 때에 로직을 구현 하는 방법도 가능하다.
궁금하신 점은 덧글로 남겨주세요.
'안드로이드' 카테고리의 다른 글
[Android Kotlin] 안드로이드 코틀린 ListView (0) | 2020.03.21 |
---|---|
[Android Kotlin] 안드로이드 코틀린 ImageView (0) | 2020.03.21 |
[Android Kotlin] 안드로이드 코틀린 Seek Bar (0) | 2020.03.21 |
[Android Kotlin] 안드로이드 코틀린 Progress Bar (0) | 2020.03.21 |
[Android Kotlin] 안드로이드 코틀린 Radio Button (0) | 2020.03.21 |