EditText๋ ์ฌ์ฉํ๊ธฐ ๋ฏผ๊ฐํ Widget์ ๋๋ค. ๊ธ์๋ฅผ ์ ๋ ฅํ๊ธฐ ์ํด์๋ ํฌ์ปค์ค๋ฅผ ๋ฐ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ํฌ์ปค์ค ๊ด๋ฆฌ๋ฅผ ์ ํด์ฃผ์ด์ผ ํ์ฃ . ์ด๋ฅผ ์ ๊ด๋ฆฌํ์ง ๋ชปํ๊ฒ ๋๋ฉด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ๋ ค๊ณ ํ์ง ์์์๋์๋ EditText์ ํฌ์ปค์ค๊ฐ ๊ฐ์ ํค๋ณด๋๊ฐ ์ฌ๋ผ์ค๊ณ ๊ฑฐ๋, ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์์ ์ ํ๊ณ ์์์๋ EditText์ ์ปค์๊ฐ ๊น๋นก์ด๋ ๋ถ์์ฌ๋ฅผ ๊ฒช๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ต์ฅํ ๋ฏธ๊ด์์ผ๋ก ์ข์ง ์์ ๋ณด์ด๊ฒ ํ๊ณ ์ฑ์ ์์ฑ๋๊ฐ ๋จ์ด์ ธ ๋ณด์ด๊ฒ ๋ง๋ญ๋๋ค.
์ ๋งํ ๊ฒ์ ConstraintLayout์ด๋ LinearLayout์ android:focusable, android:focusableInTouchMode ์์ฑ๊ณผ android:inputType=”text” ๋ฑ์ผ๋ก ํด๊ฒฐํ ์ ์์ผ๋. EditText๊ฐ TouchMode๋ก ๋ค์ด๊ฐ๊ฒ ๋ผ์ ์ปค์๊ฐ ๊ณ์ ๊น๋นก์ด๋ ๊ฒ์ ๊ณ ์น๊ธฐ ๊ต์ฅํ ๊น๋ค๋กญ์ต๋๋ค. ์ ๋ํ ๊ฐ๋ฐ ์ค์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋นํ ์ฝ์ง์ ํ์ด์ผ ํ์ต๋๋ค. ๋ฐ๋ผ์ ์ด๋ฅผ ํด๊ฒฐํ ๊ฒฝํ์ ๊ณต์ ํ๊ณ ์ ํฉ๋๋ค. ์ง์์ ๋๋ ์ผ ํ๋ ๊ฑฐ๋๊น์!!
์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ TouchMode์ ๋ํด์ ์ดํดํด์ผ ๋ฉ๋๋ค. ํฐ์น ๋ชจ๋๋ ๋ง๊ทธ๋๋ก ํฐ์นํ๋ฉด ์ง์ ๋๋ ๋ชจ๋์ธ๋ฐ ์ง์ ํ๊ฒ ๋๋ฉด isFoucsableInTouchMode๊ฐ true์ธ ๋ทฐ(EditText)๋ง ํฌ์ปค์ค๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ์ด ๋ง์ ๋ฐ๋๋ก ํ๋ฉด isFocusableInTouchMode๊ฐ false์ธ ๋ทฐ๋ ํฐ์น๋ฅผ ํด๋ ํฌ์ปค์ค๊ฐ ๊ฐ์ง ์๋๋ค๋ ๋ง์ด์ฃ . ๊ทธ๋ฆฌ๊ณ ์ด์ ํด๋น๋๋ View๋ EditText๋ฅผ ์ ์ธํ ๊ฑฐ์ ๋ชจ๋ ๋ทฐ์ ํด๋น๋ฉ๋๋ค. ๋ฐ๋ผ์ EditText์ ํ ๋ฒ ํฌ์ปค์ค๊ฐ ๊ฐ๋ฉด ๋ค๋ฅธ ๋ทฐ๋ฅผ ํฐ์นํด๋ ๊ทธ ๋ทฐ์๊ฒ ํฌ์ปค์ค๊ฐ ๊ฐ์ง ์๊ฒ ๋ฉ๋๋ค. ์ด๋ก ์ธํด EditText์ ์์ ์ ๋ง์ณค์์๋ ๋ถ๊ตฌํ๊ณ ์ปค์๊ฐ ๊น๋นก์ด๋ ๋ถ์์ฌ๊ฐ ์๊ธฐ๋ ๊ฒ ์ ๋๋ค.
(Touch Mode์ ๋ํ ์ข ๋ ์์ธํ ๋ด์ฉ์ ๊ณต์๋ฌธ์์์ https://developer.android.com/guide/topics/ui/ui-events#TouchMode)
๊ทธ๋ ๋ค๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ ์์๊น์? ์ฝ๋๋ฅผ ํตํด์ ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
if (ev!!.action == MotionEvent.ACTION_DOWN) {
val v = currentFocus
if (v is EditText) {
val outRect = Rect()
v.getGlobalVisibleRect(outRect)
if (!outRect.contains((ev.rawX.toInt()), (ev.rawY.toInt()))) {
v.clearFocus()
hideKeyboard(editText) // hideKeyboard๋ ๋ด๊ฐ ๋ง๋ ํจ์๋ค.
}
}
}
return super.dispatchTouchEvent(ev)
}
ํต์ฌ ์์ด๋์ด๋ฅผ ์ค๋ช ํ์๋ฉด.
1. TouchEvent๊ฐ ๋ค์ด์ฌ๋๋ง๋ค ์ต๊ทผ ํฌ์ปค์ค๋ฅผ ๋ฐ์ View๊ฐ ๋ฌด์์ธ์ง ํ์ ํ๋ค.
2. ๋ง์ฝ ์ต๊ทผ ํฌ์ปค์ค๋ฅผ ๋ฐ์ View๊ฐ EditText๊ณ Touch๋ ์์น๊ฐ EditText๊ฐ ์๋๋ผ๋ฉด EditText์ Foucs๋ฅผ clearFoucs() ํ๋ค.
(์ ๋ StackOverFlow์์ ์ฐพ์์ด์ ใ ใ https://stackoverflow.com/questions/4828636/edittext-clear-focus-on-touch-outside/8766475)
EditText, clear focus on touch outside
My layout contains ListView, SurfaceView and EditText. When I click on the EditText, it receives focus and the on-screen keyboard pops up. When I click somewhere outside of the EditText, it still h...
stackoverflow.com
์ฐธ๊ณ ๋ก dispatchTouchEvent๋ Activity์์๋ง ์๋ํ๋ ์ฝ๋์ ๋๋ค. ์์ด๋์ด๋ฅผ ์ ํ์ฉํ์ฌ ์ํฉ์ ๋ง์ถ์ด ์ฝ๋๋ฅผ ์ง๊ธธ ๋ฐ๋์ :)
๋ฌธ์ ๋ฅผ ์ ํด๊ฒฐํ๊ณ ํ๋ณต ์ฝ๋ฉํ๊ธธ ๊ธฐ์ํ๊ฒ ์ต๋๋ค!!
'Android' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Android / NestedScrollView ๋ด์ RecyclerView ์๋ ์คํฌ๋กค ๋ฌธ์ (์คํฌ๋กค ๋ฐ๋ฆผ ํ์) (0) | 2020.08.04 |
---|---|
Android Firebase ๋์ ๋งํฌ (Dynamic Link) (0) | 2020.07.24 |
Firebase Release ๋ฒ์ SHA1 (0) | 2020.07.24 |