1. EditText 입력 후 배경 터치시 포커스 해제 및 키보드 숨김처리

// MARK: - EditText 입력 후 배경터치시 포커스 해제 및 키보드 숨김처리
    override fun dispatchTouchEvent(event: MotionEvent?): Boolean {

        if (event?.action === MotionEvent.ACTION_DOWN) {
            val v = currentFocus

// 특정 EditText 별도 처리시 id 값으로 구분
//            DLog.e(Exception(), "dispatchTouchEvent1 : ${v} / ${v?.id}")
//            v?.let {
//                if ( it.id == R.id.etRrnSecond || it.id == R.id.etLicenseNumber3) {
//                    DLog.d(Exception(), "etRrnSecond or etLicenseNumber3")
//                    return false
//                }
//            }

            if (v is EditText) {
                val outRect = Rect()
                v.getGlobalVisibleRect(outRect)
// 배경터치시 키보드 숨김 처리
                if (!outRect.contains(event.rawX.toInt(), event.rawY.toInt())) {
                    v.clearFocus()
                    val imm: InputMethodManager =
                        getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0)
                }
            }
        }
        return super.dispatchTouchEvent(event)
    }

 

2. EditText 입력 포커스 및 해제 구분


// 배경 클릭으로 키보드 및 포커스 해제시 조건이 잘못됬을 경우 자동으로 재포커싱
private fun setReInputFocus(edit: EditText, message: String) {

    Toast.makeText(this, message, Toast.LENGTH_SHORT).show()

    edit.postDelayed({
        edit.requestFocus()
        val imm: InputMethodManager =
            getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.showSoftInput(edit, 0)
    }, 500)
}


mNameEditText?.onFocusChangeListener = OnFocusChangeListener { view, hasFocus ->
    if (hasFocus == true) {
        // 포커스 
    } else {
        // 해제
        mNameEditText?.let {
            if (it.text.length <= 1) {
                setReInputFocus(it, "이름을 2자 이상 입력해주세요.")
            }
        }
    }
}

 

 

3. EditText 글자 입력시 컨트롤 하기

mNameEditText?.addTextChangedListener(object : TextWatcher{
    override fun beforeTextChanged(charSequence: CharSequence?, start: Int, count: Int, after: Int) {
        // 현재 입력한 글자 입력되 전 Text 
    }

    override fun onTextChanged(charSequence: CharSequence?, start: Int, before: Int, count: Int) {
        TODO("Not yet implemented")
    }

    override fun afterTextChanged(editable: Editable?) {
        TODO("Not yet implemented")
    }

})

+ Recent posts