Androidで画面が開かれると同時にキーボードを表示したい場合の実装
Androidで画面が開かれると同時にキーボードを表示したい場合の実装
views
| comments
キーボードが表示されない#
画面を開いたタイミングでキーボードを表示したいと思い下記を参考にキーボードを表示しようとした 入力方法の表示の処理 | Android デベロッパー | Android Developers ↗
しかし、onResumeのタイミングででキーボードを表示しようとしても、表示されたりされなかったり不安定な現象が出た。
ボタンをタップしてキーボードを表示しようとすると キーボードが確実に表示されたので、 どうやらタイミングが悪いらしいというのはわかった。
たとえば、下記のようにonResumeからdelayさせると動作するようになるが、対症療法な感じになってしまう。
view.postDelayed({
showSoftInput()
}, 100)kotlinそこでもう少し原因を探ってみた。
キーボードが確実に表示されるようにする#
結論としては、ViewのFocusだけでなく、その画面がWindowのFocusを取得している必要があるためということのようだ。 確かにデバッグログを出してみるとonResumeのあとにonWindowFocusChangedが呼び出される。 なので、onResumeのタイミングではまだWindowのFocusが取得できていない。
そのためonWindowFocusChangedでWindowのFocusが取得できてから、キーボードを表示することで確実に表示できるようになった
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
Log.d("DEBUG" , "onWindowFocusChanged hasFocus : $hasFocus")
if(hasFocus) {
binding.editText.setSelection(selectionStart,selectionEnd)
showSoftInput(binding.editText)
}
}kotlinまとめ#
キーボードを表示したい場合はEditTextへのフォーカスだけでなく、その画面のWindowFocusも必要だった。
今回検証に使用したコードは下記にあります。 GitHub - muaaru/testKeyboard ↗