【InputMethodManager】Kotlinでキーボードを閉じようとして詰まったところ


Kotlinでキーボードを閉じる方法 の記事で、

サンプルアプリを作ってInputMethodManager の使い方を紹介しました。

記事を書いている中、サンプルアプリを作る過程で、

いくつか実装に詰まったポイントがあったので、この記事ではそんな裏側を紹介します!

同じ悩みにぶつかった人の助けになれれば嬉しいです。


case1.フォーカスがEditTextから移らない問題



EditTextからフォーカスが外れた時に、ソフトキーボードを閉じようとしましたが、

なかなかフォーカスが移らず、ここで手こずりました。

【Android】画面タップでキーボードを非表示にする

こちらの記事を参考にしながら、フォーカスを移す用の View を用意したのですが、

うまくフォーカスがうつってくれず。。TT

書いてある通り、タッチを検知した時に見えないViewへフォーカスを移すという実装をしたのですが、

試行錯誤を重ねてもうまくいきません。。

↓その時の様子

「onTouch()は通っているのにview.requestFocus()が効かない!」

「xmlで android:focusable=”true” android:focusableInTouchMode=”true” の設定もしてるのに!!」

騒ぎましたが、記事で紹介されていた見えないViewにフォーカスを当てるという作戦はうまくいかず、

結局

『Fragment全体に focusableInTouchMode=”true”を行った上で、

Fragment にフォーカスを当てる』

という手段で解決しました。

うまく行ったソースコードは⬇️こちらの記事⬇️に記載しています。


case2.キーボード閉じているのにEditTextにフォーカスが当たったまま問題


入力を行なってボタンをクリックしてキーボードは閉じた。

なのにEditTextにフォーカスは当たったままでチカチカしている。。。


ボタン押下を検知するonClick()内で、

InputMethodManager を使ってキーボードを閉じたのに、

フォーカスを他に移していないことが原因でした。

この問題は、

『フォーカスを他に移すとonFocusChangeが走ってその中のキーボードが閉じる処理が働く』

と気づいたので、view.request() を行うだけで解決しました。

キーボードは出ていないのに入力欄にはフォーカスが当たっている

機能バグには繋がりませんが、ユーザー目線になるとちょっと気持ち悪いです。。。


おわり



以上 Kotlinでキーボードを閉じる方法 の記事を書いている裏で、

詰まったところ、苦しんだところの紹介でした!

参考になればぜひ本編も見て欲しいです。

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

【InputMethodManager】Kotlinでキーボードを閉じる方法

【InputMethodManager】Kotlinでキーボードを閉じようとして詰まったところ」に1件のコメントがあります

  1. ピンバック: 【InputMethodManager】Kotlinでキーボードを閉じる方法 | Memento Mori Blog

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です