(笔记)内核之输入法框架

IMF的本质
包含了虚拟键盘的系统级窗口,能处理虚拟按键的点击事件,当然也能把字符传递到编辑框中
IMF的核心思想
  • 采用Service运行具体的输入法
  • 在Service中创建窗口,把输入的内容传递到编辑框中
常见的缩写
IMF:输入法框架
IM:输入法
IMS:输入法服务
IMM:输入法管理器
IMMS:输入法管理器服务
IME:具体的输入法,包括IMS和各种Bind
IMF框架的四个Binder
IMM:
    Binder,编辑框对应的Binder,IME通过该Binder将虚拟按键消息传递给编辑框;
    IMM对应的Binder,方便IMMS访问客户进程,IMMS需要将IME的Binder传递给客户进程,此后客户进程可直接访问IME;
IME:
    IMS对应的Binder,IMMS通过它控制输入法的状态;
    专属Binder,客户端调用,将按键消息传递给IME;

按键和触摸消息都要将消息转换为虚拟按键消息–>IMM,编辑框对应的Binder–>编辑框;
不同的是按键消息之间传递到客户端中,然后由客户端先调用IME中的专属Binder,将按键消息装换为虚拟按键消息;触屏消息会直接转换为虚拟按键消息。

Binder对应的实现类
InputConnection,接口,定义了编辑框应该提供的函数接口;
InputMethodClient,aidl文件,方便IMMS想客户端传递一些输入法信息;
InputMethodSession,aidl文件,定义了IMM可以直接访问输入法接口本身的接口;
InputMethod,接口,定义了输入法必须提供的接口
输入法的主要操作
(1)模块启动
客户端-->Connection
客户端-->IMM-->IMMS-->IMS-->IMMS Binder-->Session Binder
     -->Connection Binder-->显示-->创建输入法内部视图-->显示
(2)输入法的启动
启动IMS所在的Service;创建Session Binder;
输入法的启动系统自动完成,程序可以让它重启,或者控制显隐;
(3)输入法的显示
    1 调用IMMS的windowGainedFoucus();
    2 调用IMM的showSoftInput();
    3 点击编辑框,弹出输入法;
 三种方式,最后都会调用到IMS的showSoftInput()函数
输入法窗口的显示过程
(1)判断当前窗口是否显示;
(2)判断是否真的需要显示输入法窗口;
(3)调用IMS的showWindow函数,获取输入区、候选区、提取区视图,添加到输入法中;
标准布局的IMS
必要条件,实现三个Binder接口
IInputContext,IInterface类型的interface,可重载onCreateInputConnection,返回一个InputConnection(向编辑框传递字符);
IInputMethod,IInterface类型的interface,将被IMMS调用;
IIputMethodSession,IInterface类型的interface,客户端专属;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值