每日一问之软键盘的弹出和隐藏

这篇博客详细介绍了Android中软键盘的弹出和隐藏操作,以及`android:windowSoftInputMode`属性的10个不同值的应用,提供了亲测有效的代码示例。


关于输入法的弹出和隐藏,博客有很多,但有的说的不清楚,下面的代码都是亲测成功的。

隐藏输入法

最常用的做法:
((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);







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值