AndroidアプリのEditTextを含む画面でキーボードを非表示にする

More than 3 years have passed since last update.

AndroidアプリでEditTextがある画面では、画面を開いたときにEditTextにフォーカスが当たり、ソフトウェアキーボードが表示されます。

画面の下のほうまで表示したい場合などにソフトウェアキーボードを表示しないようにするには、以下のような方法があります。


EditTextからフォーカスをはずす

TextViewなどのほかのビューにフォーカスを当てます。

ビューの子要素にrequestFocusタグを入れることで、アクティビティ表示時にそのビューがフォーカスされます。

この際、フォーカスを当てるビューにfocusablefocusableInTouchModeをそれぞれ指定します。

<EditText

... />

<TextView
...
android:focusable="true"
android:focusableInTouchMode="true"
>
<requestFocus />
</TextView>

こちらで紹介されている方法と同様です。

ただし、EditTextからフォーカスが外れるので、場合によっては目立たなくなったり、入力欄であることがわかりにくくなってしまうことがあります。

フォーカスを当てつつキーボードも表示しないようにするには、次のようにします。


EditTextにフォーカスした状態でキーボードを非表示にする

windowSoftInputModeを指定することで、アクティビティ起動時のフォーカスでキーボードが表示されないようにすることができます。

これにより、EditTextにフォーカスが当たっていて、ソフトウェアキーボードが表示されない状態にすることができます。

AndroidManifest.xmlで設定しておく方法と、Javaのコードから指定する方法があります。


AndroidManifest.xmlで設定する場合


AndroidManifest.xml

<manifest ... >

<application
... >
...
<activity
android:name="hoge.MyActivity"
android:windowSoftInputMode="stateAlwaysHidden" >
</activity>
</application>
</manifest>


Javaのコードから指定する場合

こちらで紹介されている方法と同様です。


MyActivity.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