Activity起動時のソフトキーボードの制御(非表示)方法

    どうも、伊藤です。

    Activity起動時にEditTextにフォーカスがあたると自動でソフトキーボードが表示されてしまいます。
    このソフトキーボードを表示しないようにするには、WindowのsetSoftInputMode()でLayoutParams.SOFT_INPUT_STATE_HIDDEN(またはSOFT_INPUT_STATE_ALWAYS_HIDDEN)を設定すればいいのですが、何故かこれを設定するとソフトキーボード表示した際に画面がスクロールされるようになってしまいます。機種依存?

    画面がスクロールされること自体が問題なければ上記のままでいいのですが、adjustResizeなどアクティビティーを伸縮させたい場合は上記実装では問題となります。
    twitterの投稿画面やFacebookのコメント一覧ページのように上部と下部にメニューがあるダイアログ画面ではUIとしては伸縮系が望ましいと思いますので、この際にソフトキーボードを表示しないようにするためLayoutParams.SOFT_INPUT_STATE_HIDDENを設定すると上記の問題が発生してしまいます。
    余談ですが、Android版のFacebookのコメント一覧ページはIMEの予測変換部分を削除しても画面が収縮されません。IME表示非表示の制御(Androidはキーボードが表示されているか否かを判別するAPIがないので独自に制御が必要)はうまくいっているようなので、恐らくSoftInputModeの制御がうまくできていない、或いは実装されていないものと推測しています。

    上記ケースの場合、AndroidManifestの該当のactivityには以下を実装し、
    android:windowSoftInputMode=”adjustResize”

    onCreateやonCreateViewで該当のEditTextのFocusを無効にする事で解決します。

    EditText etCommentBox = (EditText)findViewById(R.id.commentBox);
    etCommentBox.setFocusable(false);
    etCommentBox.setFocusableInTouchMode(false);

    Windowクラスなど機種依存しそうなものは避け、上記の様にfocusで制御した方が機種依存の割合は減るかもしれません。

    ではでは。