我正在编写自己的InputMethodService
并且我想基本上检测键盘弹出和向下弹出以便开始和停止做事情。我有一个最简单的`MyInput'类,它做的很少:
public class MyInput extends InputMethodService {
private static final String TAG = "MyInput";
@Override
public View onCreateInputView() {
Log.d(TAG, "onCreateInputView");
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
return inflater.inflate(R.layout.my_keyboard, null);
}
@Override
public void onStartInput(EditorInfo attribute, boolean restarting) {
super.onStartInput(EditorInfo attribute, boolean restarting);
Log.d(TAG, "onStartInput restarting = " + restarting);
}
@Override
public void onFinishInput() {
super.onFinishInput();
Log.d(TAG, "onFinishInput");
}
}
我的视图正常弹出,但在日志中,我可以看到一种非常奇怪的行为。每次键盘显示或隐藏时,都会调用这两个函数;使我无法检测到它实际显示的时间。
/** Keyboard not showing, I press an TextView **/
D onFinishInput
D onStartInput restarting = false
/** Keyboard showing, I press back **/
D onFinishInput
D onStartInput restarting = false
/** Keyboard not showing **/
我不明白为什么这么简单的例子不起作用。谢谢你的帮助
答案 0 :(得分:2)
不幸的是,official documentation of the IME Lifecycle 确实缺乏。通过大量调试,我(最初为自己)创建了一个更好的 IME 生命周期文档:
关于您最初的问题,如果您想知道您的键盘当前是否正在显示,您不应该查看 onStartInput
,但您需要查看 onStartInputView
。您的键盘在 onStartInputView
和 onFinishInputView
之间的通话中可见。