我有一个简单的 InputMethodService 实现:
class MyKeyboardView : InputMethodService() {
override fun onCreate() {
super.onCreate()
Timber.d("onCreate")
}
// Also tried the default implementation
override fun onShowInputRequested(flags: Int, configChange: Boolean): Boolean {
Timber.d("onShowInputRequested")
return true
}
override fun onCreateInputView(): View {
Timber.d("onCreateInputView")
return KeyboardView(this)
}
private class KeyboardView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
init {
Timber.d("Init")
}
}
}
输入法已选择为当前输入法。
调用其他方法,如
onCreate
、onShowInputRequested
、onStartInputView
,但不调用 onCreateInputView
。
onCreateInputView
永远不会被调用。为什么?
来自
onStartInputView
的doc:
保证 onCreateInputView() 会在调用此函数之前的某个时间被调用。
因此,如果您通过此方法看到调试日志,则必须调用 create 方法。
也尝试覆盖
onEvaluateInputViewShown
并返回 true。