-
[안드로이드 kotlin] 소프트 키보드 내리기(activity, custom dialog)안드로이드(kotlin)/기능 관련 2021. 5. 4. 09:59
EditText 를 사용하면 소프트 키보드를 이용하게 되는데 EditText 외에 다른곳을 누르면 소프트 키보드가 내려가도록 하려고 합니다.
코드는 간단합니다. 아래처럼 몇 줄만 넣으면 되죠.
123456@Overridepublic boolean onTouchEvent(MotionEvent event) {InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);return true;}cs 자바 코드
12345override fun onTouchEvent(event: MotionEvent): Boolean {val imm: InputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManagerimm.hideSoftInputFromWindow(currentFocus?.windowToken, 0)return true}cs 코틀린 코드
특정 레이아웃을 눌렀을 때만 소프트키보드를 내려가게 하고 싶다면 해당 레이아웃의 setOnClickListener{} 안에 넣으면 됩니다.
12345678inputLayout.setOnClickListener {softkeyboardHide()}fun softkeyboardHide() {val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManagerimm.hideSoftInputFromWindow(editText.windowToken, 0)}cs 위 코드처럼 함수로 만들고 그 함수를 setOnclickListener 안에 넣습니다.
일반적인 엑티비티에서는 onTouchEvent 메소드 내에 또는 setOnclickListener 안에 코드를 넣어주면 됩니다.
커스텀 다이얼로그를 사용한 경우에는 어떤식으로 구현 했는지에 따라 방식에 따라 달라지는데요.
그냥 편하게 일반적인 엑티비티처럼 onTouchEvent 메소드를 이용하기 위해서는 Dialog 를 상속받는 방법으로 이용하면 됩니다.
1234567891011121314151617181920212223242526272829303132class AdminPwCustomDialog(context: Context) : Dialog(context) {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.admin_pw_alert_dialog)window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) // 배경을 투명하게 변경. 직접 만든 둥근 배경을 지정하기 위해서 투명하게 만들었음.val pwEt = findViewById<EditText>(R.id.pwEt)val okBtn = findViewById<Button>(R.id.okBtn)val cancelBtn = findViewById<Button>(R.id.cancelBtn)window!!.setLayout(1000, 600) // 다이얼로그의 크기 지정setCanceledOnTouchOutside(false) // 다이얼로그 영역 밖을 선택했을 때 사라지도록 함setCancelable(false) // back button 작동 안됨okBtn.setOnClickListener {dismiss()}cancelBtn.setOnClickListener {dismiss()}}override fun onTouchEvent(event: MotionEvent): Boolean {val imm: InputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManagerimm.hideSoftInputFromWindow(currentFocus?.windowToken, 0)return true}}cs 커스텀 다이얼로그에서 소프트키를 사라지게 하기 위해서는 Dialog class 를 상속받고 onTouchEvent() 를 사용하는게 편한것 같습니다.
dispatchTouchEvent() 같은것도 사용해봤으나 구현만 복잡해지고 힘든거같았습니다.
다른 터치 이벤트가 필요한것이 아닌 이상은 onTouchEvent() 를 추천드려요.
'안드로이드(kotlin) > 기능 관련' 카테고리의 다른 글
[안드로이드 kotlin] webview 버튼 선택시 외부 브라우저가 실행되지 않도록 하기 (0) 2022.09.23 [안드로이드 kotlin] camera, gallery URI 확인 및 주의할 점 (0) 2022.04.12 [안드로이드 kotlin] retrofit 으로 내용이 비어있는 jsonoObject 요청 보내기 (0) 2021.12.12 [안드로이드 kotlin] 토스트 메시지 사용하기 (0) 2020.01.04 [안드로이드 kotlin] MediaPlayer 와 SoundPool (0) 2019.12.19