- 1、打开Android Studio创建项目,该项目和普通APP的不同之处在于它不需要添加任何Activity:
我给该输入法命名为AndroidXXIME。
- 2、修改manifest文件
如前文《Android下创建一个输入法》中所说:输入法是一个包含IME service的安卓应用程序,首先应该在程序的manifest中声明service。我的manifest.xml文件如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.binglen.androidxxime"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <service android:name=".AndroidXXIME" android:label="@string/xxime" android:permission="android.permission.BIND_INPUT_METHOD" > <intent-filter> <action android:name="android.view.InputMethod" /> </intent-filter> <meta-data android:name="android.view.im" android:resource="@xml/method"/> </service> </application> </manifest>
在Android Studio生成application块的尾部添加IME service的声明。第一行粗体字声明需要BIND_INPUT_METHOD权限,第二行粗体字创建了一个能够匹配android.view.InputMethod的intent filter,第三行粗体字定义了输入法的metadata。
需要注意:service android:name必须与后面java文件中的类名保持一致。
接下来创建该service中声明的资源。
- 3、method.xml
meta-data里用到了资源xml/method文件,该文件中包含了输入法的subtype属性,输入法通过该属性定义它所支持的输入模式和语言,一个输入法可以包含多个subtype属性。在工程中res下创建xml文件夹,把method.xml添加到该文件夹下。method.xml内容如下:
<?xml version="1.0" encoding="utf-8"?> <input-method xmlns:android="http://schemas.android.com/apk/res/android"> <subtype android:label="@string/subtype_en_US" android:imeSubtypeLocale="en_US" android:imeSubtypeMode="keyboard" /> </input-method>
关于subtype的属性,可以参见InputMethodSubtype:
label是该subtype的名字
imeSubtypeLocale是该subtype支持的语言类型
imeSubtypeMode是它所支持的模式,可以是keyboard或者voice,当输入法被调起是,系统会把用户选择的mode值传给输入法。
- 4、stings.xml
在这里补上前文引用到的字符串定义:
<string name="xxime">XXIME</string> <string name="subtype_en_US">English (US)</string>
xxime在manifest中定义service的android:label时被引用到,该字串用来显示系统“语言和输入法”中本输入法的名字: