在Android的Activity放置EditText之後,如果沒有做特別的調整,每次一進入Activity,EditText都會自動取得焦點,然後彈出虛擬鍵盤,造成畫面變得擁擠。雖然Android這樣的設計是為了減少使用者點擊螢幕的次數,但是並不是在所有情況下一進入Activity都需要自動彈出虛擬鍵盤,使用者可能只是要看資料而已(例如看聊天訊息)。



解決一進入Activity就自動彈出虛擬鍵盤

只要在Activity的onCreate階段,加上以下程式碼即可。

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

或是在AndroidManifest.xml中,設定Activity的android:windowSoftInputMode屬性,如下:

<activity
    android:name="org.magiclen.TestActivity"
    android:label="@string/app_name"
    android:windowSoftInputMode="stateHidden" />

設定windowSoftInputMode屬性為State Hidden之後,進入Activity時,EditText依然會取得焦點,但不會立刻彈出虛擬鍵盤,還要再點擊一次EditText才會彈出鍵盤。問題成功解決了!

解決一彈出Dialog又再自動彈出虛擬鍵盤

Dialog中若有EditText,也會遇到和Activity一樣,在出現Dialog的同時又再自動彈出虛擬鍵盤的狀況。解決方法跟Activity相同,取得Dialog的Window後,使用setSoftInputMode方法來設定隱藏鍵盤,程式碼如下:

AlertDialog dialog = new AlertDialog.Builder(this).setView(editText).create();
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
dialog.show();