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