实现默认 Android 软键盘的 类 是什么?

What are the classes that implement the default Android soft keyboards?

实现默认 Android 软键盘的 类 是什么,当您使用 android:inputType="text" 或其他可能的 [= 值定义 EditText 时得到的软键盘21=]?

(我想看看这些 类 是如何工作的,为它们引入一些额外的功能。)

我发现键盘不是我的Activity的一部分,而且键盘的OnTouch事件不经过Activity.dispatchTouchEvent(..)

这与 the documentation 一致,表示键盘 运行 在服务中,显然意味着它 运行 在不同的线程中并且不属于 Activity 包含 EditText 元素等。

还说这个服务是由InputMethodService实现的。

我希望通过在各个地方InputMethodService设置断点找到这些类,包括它的onCreate(..)方法。 None 个断点已命中。

所以我找不到这些 类。

有什么帮助吗?

谢谢

InputMethodService 是所有软键盘的基础class。但是没有默认的软键盘。每一个都是自己完全独立的应用程序。每个 OEM 独立决定使用哪个应用程序。

这就是您的断点失败的原因 - 因为断点需要放在不同的应用程序(键盘应用程序)中。在 EditableInputConnection 中放置断点会更幸运,它是 TextView 和 EditView 两个应用程序之间的通信桥梁的实现。

如果您有兴趣查看代码,请查看 https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/refs/heads/master That's Google's basic keyboard. It can show you how things work, but IIRC it isn't written for readability. Of course its been 8 years since I've written a keyboard, maybe its gotten better. The direct link to the InputMethodService is https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/refs/heads/master/java/src/com/android/inputmethod/latin/LatinIME.java