• 浅谈Android输入法(IME)架构


    简介:

    输入法 (IME) 是一种可让用户输入文本的用户控件。Android
    提供了一种可扩展的输入法框架。借助该框架,应用可以为用户提供备选输入法,例如屏幕键盘,甚至语音输入。安装所需的 IME
    后,用户可以从系统设置中选择要使用的 IME,并在整个系统中使用该 IME;同时只能启用一个 IME。
    如何开发一个简单的输入法,这得先了解一下Android中自带的输入法框架IMF

    1.IME生命周期:


    输入法本质就是一个Service,假设用户现在刚刚启动一个APP,焦点首次进入文本编辑框时,Android就会通知Service开始进行初始化,便有了生命周期图中所示的:

    • 首先执行onCreate方法,该方法做了一些字符串变量分隔符的初始化。

    • 其次执行onCreateInputView方法,在要显示用户输入的区域时,Android自带框架会调用这个方法,该方法对inputview进行初始化,读取布局文件信息,设置onKeyboardActionListener,并初始设置keyboard。

    • 然后执行onCreateCandidatesView方法,在要显示一些候选词的视图时由框架调用,和上面的onCreateInputView方法类似,在这里是对candidateview进行初始化。

    • 最后执行onStartInputView方法,将 inputview跟当前的keyboard重新关联起来。

    2.Android输入法架构图:

    在这里插入图片描述
    图中一些名词含义解释:

    • IMMS:输入法管理服务InputMethodManagerService
    • IMM:输入法管理 InputMethodManager
    • IMS:输入法服务 InputMethodService

    3.框架中部分组件使用

    在 Android 系统中,IME 是包含一项特殊 IME 服务的 Android 应用。
    应用的清单文件必须声明该服务,请求必需的权限,提供一个与操作 action.view.InputMethod 匹配的 Intent
    过滤器,并提供定义 IME 特征的元数据。

    BIND_MIDI_DEVICE_SERVICE权限
    在这里插入图片描述

    以下代码段声明了一项 IME 服务:

    
    
        ***//请求BIND_MIDI_DEVICE_SERVICE让此服务可以将IME连接到系统***
        
       //设置一个与InputMethod操作匹配的intent过滤器
            
            
        
        ***//定义此IME的元数据***
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    控制IME 设置的 Activity

    
    
        
            
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    昨天访问量破记录
    Fedora文件历史记录怎么开启? Fedora历史记录的显示方法
    Vue 对话框 Dialog 重新打开后数据重置/清空遗留问题
    Nginx的反向代理、动静分离、负载均衡
    Python爬虫编程思想(158):Scrapy中的下载器中间件
    线上办理流量卡提示收货地址不规范,这种到底是什么原因呢?
    linux挂载
    C语言——二周目——程序的翻译与执行环境
    NIO基础-ByteBuffer,Channel
    DITTEL控制器维修SENSITRON6-2AE
  • 原文地址:https://blog.csdn.net/fjnu_se/article/details/128179769