浅谈Android输入法(IME)架构

  • Post author:
  • Post category:其他






简介:


输入法 (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 服务:

<!-- Declares the input method service -->
<service android:name="FastInputIME"
    android:label="@string/fast_input_label"
    android:permission="android.permission.BIND_INPUT_METHOD">
    ***//请求BIND_MIDI_DEVICE_SERVICE让此服务可以将IME连接到系统***
    <intent-filter>
   //设置一个与InputMethod操作匹配的intent过滤器
        <action android:name="android.view.InputMethod" />
        
    </intent-filter>
    ***//定义此IME的元数据***
    <meta-data android:name="android.view.im"
               android:resource="@xml/method" />
</service>


控制IME 设置的 Activity

<!-- Optional: an activity for controlling the IME settings -->
<activity android:name="FastInputIMESettings"
    android:label="@string/fast_input_settings">
    <intent-filter>
        <acti



版权声明:本文为fjnu_se原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。