1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

何もないところをタップでキーボードを閉じるを実現する

Last updated at Posted at 2021-09-28

hide-keyboard-on-tapping-other-area (1).png

概要

チャット風アプリを作っていると 「何もないところタップしたらキーボードに閉じる」 という挙動を入れたくなります。そのための方法を2つ考えてみたので紹介します。

方法1

「何もないところ」は具体的にいうとキーボードや EditText 部分以外の RecyclerView の領域になります。なので、素直にRecyclerViewのアイテムに対してクリックリスナーをセットしてその中でキーボードを閉じるコードを書いてあげればよさそうです。

groupieAdapter.setOnItemClickListener { _, _ ->
  hideKeyboard()
}

方法2

もう1つは 「フォーカス」 を利用する方法です。 EditText 以外の View にフォーカスが移動したらキーボードを閉じるという作戦です。

editText.onFocusChanged { gainFocus, _, _ -> 
  if(!gainFocus) {
    hideKeyboard()
  }
}

フォーカスについての詳しいことは 公式ドキュメント https://developer.android.com/guide/topics/ui/ui-events.html](https://developer.android.com/guide/topics/ui/ui-events.html を参照のこと。

あとは RecyclerView のアイテムの layout ファイルに以下を追記して、アイテムがフォーカスを取得できるようにします。

++ android:focusable="true"
++ android:focusableInTouchMode="true"

方法2は 例えば ダイアログやボトムシートを開いた時にキーボードを閉じたいといった場合にも応用が効きやすいという点で優れていると言えそうです。任意の View にフォーカス可能性を設定しておきさえすれば、その View にフォーカスが移動した時にキーボードが閉じてくれるからです。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?