WebViewでパスワード入力するとかで入力フォームがあることあるよね。
通常なら入力フォームをタップするとソフトウェアキーボードが出てくると思う。
ただソフトウェアキーボードが出てこない現象にぶち当たった。
今までこんなことなかったからプチハマるw
ググってみると先人たちは
「WebViewにフォーカスが当たってないとキーボードが出てこない。だからフォーカス当ててね」
だそうで。
だからrequestFocus(View.FOCUS_DOWN)って書いてみてね!
だって。
試しにやってみたんですよ。
ダメだったんですよ・・・。
requestFocus(View.FOCUS_DOWN)をしてもソフトウェアキーボード出てこなかったんですよ。
そもそもScrollViewの中にWebViewを配置しているアプリを作ってて、フォーカスはずさないと勝手にスクロールしちゃうって現象があって、故意にフォーカスを外してたってのもあるかもしれないけど、、、。
まぁ、フォーカス外す処理を削除してもソフトウェアキーボード出てきてくれなかったんだけどね、、、。
WebViewを表示するときにScrollViewに配置しているViewGroupからremoveして違うViewGroupにaddするっていうゴリ押しアプリっていうものあるんだけど、、、。
(少しずつひどいアプリっていうのが浮き彫りにw)
で、どうやってキーボードを出せるようになったか。
WebViewを違うViewGroupにadd しているのはActivityで持っているWebViewをFragmentに渡すため。
どうしてこういうことしてるかって言うと、リスト形式?で表示されているWebViewを全画面に表示する際に再読込を発生させたくなかったから。
なので、Fragment生成時(onCreateView)にWebViewにフォーカスを無理やり当てて、Fragment破棄時にフォーカスを外すようにした。
private fun inFocus() {
webView.apply {
isFocusable = true
isFocusableInTouchMode = true
requestFocus(View.FOCUS_DOWN)
}
}
private fun outFocus() {
webView.apply {
isFocusable = false
isFocusableInTouchMode = false
}
}
雑は雑だけど、これでソフトウェアキーボードが出るようになった。
なんでフォーカスを外すようにしたかったいうとActivityにWebViewを戻したときにスクロール位置がおかしくなったから。本当に勝手にスクロールしないでほしいよね、、、。
アプリの設計がまずいんじゃない?っていうツッコミはしないでくださいww