AndroidアプリでEditText
がある画面では、画面を開いたときにEditText
にフォーカスが当たり、ソフトウェアキーボードが表示されます。
画面の下のほうまで表示したい場合などにソフトウェアキーボードを表示しないようにするには、以下のような方法があります。
EditTextからフォーカスをはずす
TextView
などのほかのビューにフォーカスを当てます。
ビューの子要素にrequestFocus
タグを入れることで、アクティビティ表示時にそのビューがフォーカスされます。
この際、フォーカスを当てるビューにfocusable``focusableInTouchMode
をそれぞれ指定します。
<EditText
... />
<TextView
...
android:focusable="true"
android:focusableInTouchMode="true"
>
<requestFocus />
</TextView>
※ こちらで紹介されている方法と同様です。
ただし、EditText
からフォーカスが外れるので、場合によっては目立たなくなったり、入力欄であることがわかりにくくなってしまうことがあります。
フォーカスを当てつつキーボードも表示しないようにするには、次のようにします。
EditTextにフォーカスした状態でキーボードを非表示にする
windowSoftInputMode
を指定することで、アクティビティ起動時のフォーカスでキーボードが表示されないようにすることができます。
これにより、EditText
にフォーカスが当たっていて、ソフトウェアキーボードが表示されない状態にすることができます。
AndroidManifest.xml
で設定しておく方法と、Javaのコードから指定する方法があります。
AndroidManifest.xmlで設定する場合
<manifest ... >
<application
... >
...
<activity
android:name="hoge.MyActivity"
android:windowSoftInputMode="stateAlwaysHidden" >
</activity>
</application>
</manifest>
Javaのコードから指定する場合
※こちらで紹介されている方法と同様です。
protected void onCreate(Bundle savedInstanceState) {
...
getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
...
}
こちらの説明ではsetContentView
の前に実行しなければ有効にならないと記載されていますが、手元で試したところではそうでなくても有効にすることができました。
(Android4.4.2で確認しました)
ソフトウェアキーボードの表示/非表示はadjustment optionとも併用可能です。
例えば、adjustResize
を同時に設定する場合は、
AndroidManifest.xml
で設定する場合は
android:windowSoftInputMode="stateAlwaysHidden|adjustResize"
Javaのコードから指定する場合は
getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN | LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
のようにすると適用できます。
※ 以下のサイトを参考にしました(文中のリンクと同じです)
・【Android】画面起動後にフォーカスを当てるViewを指定するのと指定した文字の後にカーソルを移動する - Furudateのブログ
・Activity起動時にEditTextのソフトウェアキーボードを表示しない方法 | ichRevoのブログ
・Y.A.M の 雑記帳: Android 自動でソフトキーボードが出るのを防ぐ
・WindowManager.LayoutParams | Android Developers