1.背景
進入帶有EditText的頁面時,有時需要彈出系統鍵盤,有時需要隱藏系統鍵盤,這就需要對Android系統軟鍵盤的顯示和隱藏進行人為的控制。
2.顯示系統軟鍵盤
2.1AndroidManifest中配置顯示系統鍵盤
<application ... > <activity android:windowSoftInputMode="
stateVisible
" ... > ... </activity> ... </application>
如上所示,在android:windowSoftInputMode
屬性中添加stateVisible
就可以在進入頁面時,一直彈出系統軟鍵盤
2.2手動控制系統鍵盤的彈出
如果需要在進入頁面時,可選擇性的彈出系統軟鍵盤或者隱藏系統軟鍵盤,這就不能在AndroidManifest
中配置一直顯示系統鍵盤,需要手動控制鍵盤的彈出。
可以通過InputMethodManager
來手動彈出系統軟鍵盤,代碼如下:
public void showSoftKeyboard(View view, Context mContext) {
if (view.requestFocus()) {
InputMethodManager imm = (InputMethodManager)mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
}
}
其中,傳入的view
為EditText
。
3.隱藏系統軟鍵盤
3.1進入有EditText頁面時,隱藏系統鍵盤(不自動彈出系統軟鍵盤)
在EidtText得父布局的其中一個設置一下屬性(XML中):
android:foucusable="true"
android:foucusableInTouchMode="true"
這樣,進入帶有EditText的頁面就不會自動彈出系統軟鍵盤
PS:在AndroidManifest文件中的
activity
的anroid:windowSoftInputMode
屬性沒有設置stateVisible
、stateAlwaysVisible
、stateUnchanged
值。
3.2手動控制系統鍵盤的隱藏
public static void closeSoftKeybord(EditText mEditText, Context mContext) {
InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
}
通過如上代碼,可手動控制系統軟鍵盤的隱藏,如果無效,在調用該代碼之前,先調用editText.requestFocus()
。
PS:要手動控制系統軟鍵盤的顯示和隱藏,最后不要在AndroidManifest文件中的
activity
的anroid:windowSoftInputMode
屬性中設置stateVisible
、stateAlwaysVisible
、stateUnchanged
、stateHiddn
、stateAlwaysHidden
這些值,不然可能會造成系統軟鍵盤無法手動彈出或收起的情況。
4.系統軟鍵盤把EditText所在布局頂上去(類似微信的輸入框頂在軟鍵盤上方)
AndroidManifest中設置如下代碼:
<application ... > <activity android:windowSoftInputMode="
ajustResize
" ... > ... </activity> ... </application>
5.參考
http://developer.android.com/training/keyboard-input/visibility.html#Respond
http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft