Android
初心者
AndroidStudio

【Android】ScrollViewの中でタップイベントを拾う

はじめに

スマホで文字入力する時キーボードが出てきますが、このキーボードは文字入力が完了しエンターキーを押したり背景をタップしてもキーボードは自分で閉じることはしません。そこで、文字入力するEditTextにはエンターキーが押された時にキーボードを隠す処理を追加する、また、ActivityにonTouchEventをオーバーライドし、背景がタップされた時に処理を追加することで、キーボードを残したままにすることを回避できます。しかし、ScrollViewの中で背景をタップしてもタッチイベントを取られてしまい、背景タップでキーボードを隠す事が実現できなくなります。

対処方法

ScrollViewの中でタッチイベント(ここではタップだけでいい)拾いたい時どうすればいいか?と調べたところ以下の記事が参考になりました。

https://qiita.com/garlicG/items/61ce76965a181b10d1aa

こちらでは親ビューのタッチイベントを取得しています。これなら実現できそうですが、今回はキーボードを隠したいので子ビューが複数あった時、すべての子ビューにgetParentする事になりそうです。もっと簡単にタップ検知をできないかと思ったところ、ScrollViewの中のボタンが正常に反応している事に気づきました。ScrollViewを一つのボタンとして機能させれば実現できそうなので調べたら以下のページに前例がありました。

https://stackoverflow.com/questions/16776687/onclicklistener-on-scrollview

一番簡単に実現できそうなのはScrollViewにLayoutを配置し、そのLayoutにOnClickListenerを付与する事になりそうです。