android自定义输入法判断是否在输入状态的问题

这篇博客探讨了在Android中如何在自定义输入法中判断是否处于输入状态,重点讲解了`onEvaluateInputViewShown`方法的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作中遇到一个需要判断输入法是否是在输入的状态的需求,输入法不需要显示在界面。
既然不需要输入法界面,那么让onCreateInputView时返回空。
检查inputmethodservice的API发现InputMethodService中有 onStartInput,showWindow和hideWindow,onFinishInput,onWindowShown,onWindowHidden,isInputViewShown等方法
根据经验判断onWindowShown和onWindowHidden应该是输入法触发输入和隐藏的回调.
实际测试结果
1.onWindowShown没有被调用,onWindowHidden有被调用。
2.showWindow没有被调用,而hideWindow有被调用。
3.在普通edittext中触发输入法onStartInput有被调用,而在网页中触发焦点时onStartInput没调用一次,把焦点移到网页中的空白部分,触发hideWind,再触发网页输入框焦点没有被调用onStartInput,也没调用showWindow
4.isInputViewShown无法是否在输入状态都返回false.
5.onFinishInput方法在输入法隐藏时有被调用。
这样的API太不可靠了。
难道就没有办法了吗?继续从网上下载开源的OpenWnn输入法,发现它的showWindow和hideWindow方法回调非常准确。
把给输入法加上了inputview。但是又遇到onCreateInputView没有被调用的问题,检查android api发现这样一段话。

onEvaluateInputViewShown

public boolean onEvaluateInputViewShown()
Override this to control when the soft input area should be shown to the user. The default implementation only shows the input view when there is no hard keyboard or the keyboard is hidden. If you change what this returns, you will need to call updateInputViewShown() yourself whenever the returned value may have changed to have it re-evalauted and applied.

原来默认的实现是只有在没有物理键盘或者键盘隐藏时才返回显示输入法视图。因此解决方法是关闭物理键盘或者重写这个方法,永久返回true.
解决了上面的问题后onCreateInputView有被调用。同时showWindow和hideWindow方法也有被正确调用。在showWindow和hideWindow方法中可以准确的判断输入法是否有在输入的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值