Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?
Organization

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

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 にフォーカスが移動した時にキーボードが閉じてくれるからです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?