InputStage
输入事件的传递过程如下,每个阶段都有拦截传递的能力。
NativePreImeInputStage 分发早于IME的InputEvent事件到NativeActivity中去处理, NativeActivity和普通acitivty的功能区别不大,只是很多代码都在native层去实现,这样执行效率更高,并且NativeActivity在游戏开发中很实用。 不支持触摸事件。
ViewPreImeInputStage 分发早于IME的InputEvent到View框架处理,会调用view的onkeyPreIme方法,这样就给View在输入法处理key事件之前先得到消息并处理的机会,可以直接复写onKeyPreIme,比如back事件处理。 不支持触摸事件
ImeInputStage 分发InputEvent到IME处理 ImeInputStage的onProcess方法会调用InputMethodManager的dispatchInputEvent方法处理消息。 不支持触摸事件。
EarlyPostImeInputStage 输入法之后输入事件就会流到该阶段,这个是touchmode相关的,比如你的手机有方向键,按方向键会退出touchmode,这个事件被消费,有可能会有view的背景变化,但不确定。支持触摸事件。
NativePostImeInputStage 分发InputEvent事件到NativeActivity,为了让IME处理完消息后能先于普通的Activity处理消息。此时支持触摸事件。
ViewPostImeInputStage 分发InputEvent事件到View框架,支持触摸事件。view的事件分发!!!
SyntheticInputStage 未处理的InputEvent都会传到这个阶段,例如手机上的虚拟按键消息