实现默认 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 软键盘的类都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章

自定义listview数据源adapter时可以继承的类都有哪些

Android软键盘弹出和收回监听

Android 软键盘控制方法以及开发中遇到的一些问题。

在 Toast 下保留软键盘 - ANDROID

如何在android的底部工作表对话框中隐藏软键

用于线程处理的类都有哪些