实现默认 Android 软键盘的类都有哪些?
Posted
技术标签:
【中文标题】实现默认 Android 软键盘的类都有哪些?【英文标题】:What are the classes that implement the default Android soft keyboards?实现默认 Android 软键盘的类有哪些? 【发布时间】:2021-08-29 11:21:36 【问题描述】:实现默认 android 软键盘的类是什么,当您使用 android:inputType="text"
或其他可能的 android:inputType 值定义 EditText
时获得的类?
(我想看看这些类是如何工作的,向它们引入一些额外的功能。)
我发现键盘不是我Activity
的一部分,而且键盘的OnTouch事件不经过Activity.dispatchTouchEvent(..)
。
这与the documentation 一致,即键盘在服务中运行,显然意味着它在不同的线程中运行,并且不属于包含EditText
元素的Activity
的一部分。
还说这个服务是由InputMethodService
实现的。
我希望通过在InputMethodService
的各个地方设置断点来找到这些类,包括它的onCreate(..)
方法。这些断点均未命中。
所以我没办法上这些课程。
有什么帮助吗?
谢谢
【问题讨论】:
【参考方案1】:InputMethodService 是所有软键盘的基类。但是没有默认的软键盘。每个都是自己完全独立的应用程序。每个 OEM 都独立决定使用哪个应用程序。
这就是你的断点失败的原因——因为断点需要放在不同的应用程序(键盘应用程序)中。在 EditableInputConnection 中放置断点会更幸运,它是 TextView 和 EditView 两个应用程序之间通信桥梁的实现。
如果您有兴趣查看代码,请查看https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/refs/heads/master 这是 Google 的基本键盘。它可以向您展示事情是如何工作的,但 IIRC 并不是为了可读性而编写的。当然,我写键盘已经 8 年了,也许它变得更好了。 InputMethodService 的直接链接是https://android.googlesource.com/platform/packages/inputmethods/LatinIME/+/refs/heads/master/java/src/com/android/inputmethod/latin/LatinIME.java
【讨论】:
以上是关于实现默认 Android 软键盘的类都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章