关于输入法的弹出和隐藏,博客有很多,但有的说的不清楚,下面的代码都是亲测成功的。
隐藏输入法
最常用的做法:
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(this.getCurrentFocus() .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
还有一种方法,当输入法弹出时则隐藏,如果隐藏则弹出:InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
打开输入法
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(view,InputMethodManager.SHOW_FORCED);
其中view,是一个EditText。也可以直接写成getCurrentFocus(),注意,该方法返回的是当前activity中的EditText,如果当前activity没有EditText,那么返回null;如果有2个以上EditText,那么谁获取焦点,返回的就是谁。
一个问题
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.isActive(); imm.isActive(getCurrentFocus());
上面有两个isActivity方法,很多博客上是返回输入法是否可用,或者激活之类的值,但经过测试发现,这个值一直是true,似乎根本没有false的情况。
android:windowSoftInputMode的10个属性值
在清单文件中的activity标签下,有一个属性android:windowSoftInputMode,这个属性就是用来设置软键盘与主窗口的交互模式的,该属性有10个值,下面一一说明:
下面6个是软键盘的显示和隐藏模式1、stateUnspecified:这是默认值,当进入该activity后,一般来讲软键盘是不弹出的,但如果EditText是在ScrollView内,那么会弹出软键盘。2、stateUnchanged:当上一个activity中的弹出了软键盘,那么它也弹出;如果上一个activity没有弹出软键盘,那么它也不弹出,不改变状态就是这个意思。3、stateHidden和stateAlwaysHidden:隐藏软键盘,这两个都能隐藏软键盘,区别不明。4、stateVisible和stateAlwaysVisible:强制将软键盘弹出来,即便当前界面一个控件也没有,也会弹出软键盘。两者不同的是,如果当前界面为stateAlwaysVisible,那么当跳入下一个界面,然后再返回时,软键盘还是弹出的。而如果是stateVisible,当从下一个界面返回时,软键盘就不会弹出了。
下面4个则是设置软键盘与主窗口的显示关系1、adjustUnspecified:默认值,如果文本框上面的布局控件很多,不论在不在ScrollView内部,软键盘弹出时会把它们顶上去,一些可能会看不到。如下图第2张。如果EditText在ScrollView内部,那么在输入法弹出时也可以上下滑动,最高可滑动到图3,最低可滑动到图4.不在ScrollView内部的话,不可滑动。2、adjustResize:如果EditText在ScrollView内部的话,与上面的adjustUnspecified是一样的,如果EditText在下面的话,会将它顶上去,如下图第2张。并且可以上下滑动,可以滑到最上面,如图3,也可以滑到最下面,如图4。而如果不在ScrollView内的话,当点击EditText弹出输入法时,会将输入框遮盖,如下图第3张。这种情况不能上下滑动。
![]()
![]()
![]()
3、adjustPan:对于没有滚动控件的布局来讲,这个才是默认的属性值。如果EditText在ScrollView内部,那么打开该actiivty时,是图1,它可以向下滑动,滑动的距离有限,极限到图2.不能向上滑动。如果EditText没在ScrollView内部,那么现实的效果就是图1,不能上下滑动。
![]()
4、adjustNothing:当EditText在ScrollView内时,进入该activity时,软键盘也不会弹出,只有当点击EditText时,软键盘才会弹出,如图1,可向下滑动,最大到图2,并不会到最下部。如果没有在ScrollView内,无法滑动,点击输入框,软键盘弹出后如图1.![]()
使用时,如果不确定使用哪种组合,直接设置成android:windowSoftInputMode=“stateAlwaysHidden|adjustPan”
如果想用代码设置输入法的交互模式,可参考如下代码:getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
这篇博客详细介绍了Android中软键盘的弹出和隐藏操作,以及`android:windowSoftInputMode`属性的10个不同值的应用,提供了亲测有效的代码示例。
4268

被折叠的 条评论
为什么被折叠?



