Android hideSoftInputFromWindow 不能隐藏软键盘怎么办?
2019-10-18
关键字:Android 软键盘
Android 在开发 APK 的时候需要用户输入文字是很寻常的。
通常我们都会选择使用 EditText 或自定义一个类似的输入框来承载用户的输入信息。
但正所谓唤出软键盘容易,隐藏它难啊。
你可能会说,隐藏系统输入法软键盘有什么难的,输完以后自己点一下软键盘右上角的隐藏按钮不就完事了。
没错,还真是这样。
但,现实情况却是,很少有用户愿意去做这个“多余的操作”。
做为软件开发者,我们时刻要提醒自己“用户都是懒惰的”,任何多余的动作用户都会觉得烦。就拿这个隐藏软键盘的功能来说,用户就是不愿意去点那个隐藏按钮,你也拿他们没办法啊。但往往就因为没有隐藏掉软键盘,我们的程序就可能会有很不好的体验,更有严重的还会引起程序的运行问题。
所以,我们就得加个逻辑去帮助用户隐藏这个软键盘。
如何触发隐藏软键盘的逻辑还得各位根据自己的实际需求来设计,我们这里仅来谈谈如何隐藏它。
如果你去网上搜寻通过代码隐藏软键盘的方法,那你大概率会得到如下信息:
例如由 https://www.cnblogs.com/bluestorm/p/8967492.html 所述的:
或由 https://www.jianshu.com/p/f32707a47e3e 所述的:
这些方法都是好方法,在大多数情况下都能凑效。
那什么是少数情况下呢?
就比如笔者在 坚果PRO2 上开发一款 APK 时就遇到了这个少数情况。
无论如何也无法通过这些代码来隐藏掉软键盘,在巨大的项目进度压力下甚至一度把笔者逼到濒临绝望的地步。
可悲的是网上并没有记载以上这些方法无效的情况的原因与解决办法。笔者虽然知道这个时候要想纠出原因就只能跟踪 SDK 源码了,但在项目进度压力之下,真的是有心也无力呀。
即使如此,问题还是得解。怎么办?
既然无法通过正统的方式来隐藏掉它,那就只能另辟蹊径了。
我们在手动隐藏软键盘的时候通常可以用两种方式:1、点击软键盘右上角的隐藏按钮;2、点击手机返回键。
我们无法通过代码来实现模拟点击了软键盘右上角按钮的功能,但是我们却可以实现一个模拟返回键事件的功能啊。
于是乎,这个问题就这么被解决掉了。
以下是通过代码发送一个模拟按返回键事件的代码:
new Thread(){ @Override public void run() { Instrumentation instrumentation = new Instrumentation(); instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_BACK); } }.start();
注意:发送模拟按键事件的代码只能在子线程中运行。