activity主窗口与软键盘的交互模式,只需在Menifest中,给相应的activity设置Android:windowSoftInputMode=""即可
windowSoftInputMode根据不同情况可以设置不同属性:
1)stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置
2)stateUnchanged:当这个activity出现时,软键盘将一直保持在上一个activity里的状态,无论是隐藏还是显示
3)stateHidden:用户选择activity时,软键盘总是被隐藏
4)stateAlwaysHidden:当该Activity主窗口获取焦点时,软键盘也总是被隐藏的
5)stateVisible:软键盘通常是可见的
6)stateAlwaysVisible:用户选择activity时,软键盘总是显示的状态
7)adjustUnspecified:默认设置,通常由系统自行决定是隐藏还是显示
8)adjustResize:该Activity总是调整屏幕的大小以便留出软键盘的空间
9)adjustPan:当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分
在程序中使用自定义的控件时,从不同界面跳转过来控件的高度不同,并且由于高度错误导致程序界面混乱,并且有的手机有问题有的手机没有问题,最终发现是由于不同手机对软键盘关闭时间可能不同,有使用过软键盘的界面跳转过来,界面在初始化是软键盘还未完全关闭,由于软键盘的存在导致自定义控件高度计算错误。
解决办法:就是在界面跳转之前将软键盘关闭。
软键盘的关闭方法:
(1)
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
//得到InputMethodManager的实例
if (imm.isActive()) {
//如果开启
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, InputMethodManager.HIDE_NOT_ALWAYS);
//关闭软键盘,开启方法相同,这个方法是切换开启与关闭状态的
}
(2)
if (getCurrentFocus() != null) {
((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}