android自动打开和关闭软键盘

在一个项目中我需要一个EditText获取到焦点,同时自动打开软键盘,需要使用方法:

private InputMethodManager imm;
imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(password_et, InputMethodManager.SHOW_FORCED);

有的打开了但是不按返回键不能自动关上,比如使用参数InputMethodManager.SHOW_FORCED,有的干脆打不开,比如使用参数InputMethodManager.SHOW_IMPLICIT,就不会自动弹出键盘


为了解决不能自动隐藏软键盘的问题,我找了很多资料,最后发现,如果成对使用:

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

就可以代码实现隐藏软键盘。



也就是说:我在需要打开软键盘时用:

private InputMethodManager imm;
 imm = (InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(password_et, InputMethodManager.RESULT_SHOWN);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

在关闭软键盘时,我需要再次调用

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

这样软键盘就隐藏了。


然后我的项目中让用户输入密码,当密码错误的时候会用Toast来提示用户,然后把EditText内容清空,当显示Toast的时候软键盘会自动关上,因为清空内容后用户还要输入,所以我需要再次打开软键盘。


这时我又调用了一次

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
发现软键盘并不能按照想象的打开。

考虑到隐藏软键盘也用这个方法,是不是Toast后调用的这一次是隐藏软键盘呢?虽然Toast让软键盘强制隐藏了,但是代码里面并没有跟打开软键盘时调用的这个方法成对的隐藏方法,所以这一次的调用是为了隐藏。


于是我把这个方法复制了一行,即隐藏时调用两次这个方法:

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);

发现软键盘被打开了。证明我想的是对的, 由于其他原因(只要不是代码原因)隐藏的软键盘,再次打开时必须调用两次该方法:

imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);






  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值