[Android] WebViewの入力フォームをタップしてもキーボードが出てこない

WebViewでパスワード入力するとかで入力フォームがあることあるよね。

通常なら入力フォームをタップするとソフトウェアキーボードが出てくると思う。

ただソフトウェアキーボードが出てこない現象にぶち当たった。

今までこんなことなかったからプチハマるw

ググってみると先人たちは

「WebViewにフォーカスが当たってないとキーボードが出てこない。だからフォーカス当ててね」

だそうで。

だからrequestFocus(View.FOCUS_DOWN)って書いてみてね!

だって。

試しにやってみたんですよ。

ダメだったんですよ・・・。

requestFocus(View.FOCUS_DOWN)をしてもソフトウェアキーボード出てこなかったんですよ。

そもそもScrollViewの中にWebViewを配置しているアプリを作ってて、フォーカスはずさないと勝手にスクロールしちゃうって現象があって、故意にフォーカスを外してたってのもあるかもしれないけど、、、。

まぁ、フォーカス外す処理を削除してもソフトウェアキーボード出てきてくれなかったんだけどね、、、。

WebViewを表示するときにScrollViewに配置しているViewGroupからremoveして違うViewGroupaddするっていうゴリ押しアプリっていうものあるんだけど、、、。

(少しずつひどいアプリっていうのが浮き彫りにw)

で、どうやってキーボードを出せるようになったか。

WebViewを違うViewGroupadd しているのは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

コメント

タイトルとURLをコピーしました