Developer Geek

[Android] 키보드 숨기기 in Kotlin 본문

안드로이드/Utility

[Android] 키보드 숨기기 in Kotlin

devGeek 2022. 8. 2. 09:49
반응형

[Android] 키보드 숨기기 in Kotlin

UtilityKeyboard.kt

아래와 같이 프로젝트에 UtilityKeyboard Object를 만들어서 각 함수를 정의하면 편리하게 Activity에서나 Fragment 또는 Context를 이용하여 편하게 키보드를 숨길 수 있다.

object UtilityKeyboard {
    fun Fragment.hideKeyboard() {
        view?.let { activity?.hideKeyboard(it) }
    }

    fun Activity.hideKeyboard() {
        hideKeyboard(currentFocus ?: View(this))
    }

    fun Context.hideKeyboard(view: View) {
        val inputMethodManager =
            getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
    }
}

사용 예제

참고). View 참조 방식은 ViewBinding을 이용하였다.

In Activity

개요

사용자는 보유하고 있는 포인트 안에서 사용할 만큼의 포인트를 입력한다.
단, 보유하고 있는 포인트보다 많은 값을 입력할 시 키보드는 숨겨지고 포인트 값은 보유하고 있는 최대 포인트가 입력된다.

실행영상

activit_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:paddingHorizontal="10dp"
    android:paddingVertical="20dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/use_point_title_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="포인트 사용"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/use_point_edit_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:hint="사용할 포인트를 입력하세요."
        android:inputType="number"
        android:paddingHorizontal="10dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/use_point_title_text_view" />

    <TextView
        android:id="@+id/max_point_text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#DA0B0B"
        android:textSize="12sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/use_point_edit_text" />


</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.kt

class MainActivity : AppCompatActivity() {
    private var binding: ActivityMainBinding? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        binding = activityMainBinding
        setContentView(binding!!.root)

        val maxPoint = 500
        binding?.let {
            it.maxPointTextView.text = "현재 보유중인 포인트는 $maxPoint 입니다."

            // Implement TextWatcher's onTextChanged
            it.usePointEditText.addTextChangedListener(onTextChanged = { text, start, before, count ->
                if (text != null) {
                    val point = text.toString().toInt()
                    if (point > maxPoint) {
                        /** 키패드 내리기 */
                        this.hideKeyboard()
                        /** 사용금액 [maxPoint]값으로 변경*/
                        it.usePointEditText.setText(maxPoint.toString())
                        /** 커서 끝으로 이동 */
                        it.usePointEditText.setSelection(it.usePointEditText.text.length)
                    }
                }
            })
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        binding = null
    }
}
질문과 잘못된 점에 대해 말씀해주시는 건 언제나 환영입니다.
zero5.two4@gmail.com
반응형

'안드로이드 > Utility' 카테고리의 다른 글

[Android] Facebook 로그인(1) 셋팅 in Kotlin  (0) 2022.12.07
Comments