どうも、伊藤です。
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で制御した方が機種依存の割合は減るかもしれません。
ではでは。