LoginSignup
4
6

More than 3 years have passed since last update.

【Android / Kotlin】フォーム(EditText)入力の際、背景タップで表示キーボードを閉じる

Posted at

はじめに

Androidアプリ開発(Kotlin)で学んだ内容を備忘録として残します!

どのような機能か?

場面
  • フォーム(EditText)にフォーカスが当たっている
  • 入力用キーボードが表示されている
動作

上記の状態で背景画面をタップするとキーボードを閉じる

というもの

実装

Activity

MainActivity.kt

// ~ 省略 ~

// Viewがタッチされる時に処理が走るメソッド
override fun onTouchEvent(event: MotionEvent?): Boolean {
    // InputMethodManager をキャストしながら取得
    val inputMethodManager: InputMethodManager = 
        getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

    // エルビス演算子でViewを取得できなければ return false
    // focusViewには入力しようとしているのEditTextが取得されるはず
    val focusView = currentFocus ?: return false

    // このメソッドでキーボードを閉じる
    inputMethodManager.hideSoftInputFromWindow(
        focusView.windowToken,
        InputMethodManager.HIDE_NOT_ALWAYS
    )

    return false
}

これだけ。

ちなみに

キーボードを閉じるメソッドはInputMethodManagerクラスではこのように定義されている。

InputMethodManager.java
public boolean hideSoftInputFromWindow(IBinder windowToken, int flags) {
    return hideSoftInputFromWindow(windowToken, flags, null);
}

共通化したらこんな形になりそう(おまけ)

共通化ファイル

objectで定義

KeyboardUtils.kt
object KeyboardUtils {
    fun hideKeyboard(focusView: View) {
        val inputMethodManager: InputMethodManager =
            focusView.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(
            focusView.windowToken,
            InputMethodManager.HIDE_NOT_ALWAYS
        )
    }
}

Activity

Activityで呼ぶ

MainActivity.kt
// ~ 省略 ~

override fun onTouchEvent(event: MotionEvent?): Boolean {
    val focusView = currentFocus ?: return false
    KeyboardUtils.hideKeyboard(focusView)

    return false
}

補足

Activityに実装していれば、関連するFragmentでも同様に動作するためFragmentには実装の必要なし

スペシャルサンクス(参考にさせていただいた資料)

最後に

簡単な短い記事でしたが、誤り、ご指摘などあればコメントいただければ幸いです!

ありがとうございました!!

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6