Android的文本和输入---创建输入法(四)

截取硬件的按键事件

即使输入法窗口没有明确的焦点,它也会首先接收到硬件的按键事件,并能够选择是使用还是把它们转发给应用程序。例如,在文本编排期间,你可以使用方向键在输入法UI的候选区进行导航。你也可以捕获回退键来消除从输入法窗口弹出的任何窗口。

重写onKeyDown()和onKeyUp()方法来获取硬件的按键事件。

对于不想自己处理的按键,要记住调用super()方法。

创建IME的子类型

子类型运行IME来展现多种输入模式以及由IME所支持的语言。一个子类型可以表现为:

1. 一种语言环境,如en_US或fr_FR;

2. 一种输入模式,如语音、键盘或手写;

3. 其他的输入样式、格式、或特殊的IME属性,如10个键或qwerty键盘的布局等。

基本上模式是任意文字,如“keyboard”、“voice”等等。

一个子类型也可以是这些类型的一个组合。

子类型信息被用于输入法的切换,在通知栏和IME设置窗口中可以使用。这些信息也允许框架直接携带特定的IME子类型。当你创建一个IME时,可以方便的使用子类型,因为它会帮助用户标识并完成不同IME语言和模式之间的切换。

使用<subtype>元素在输入法的XML资源文件中定义一种子类型。下面的示例中定义了两种子类型:一种是用于美国英语环境的键盘子类型,另一中是用于法语环境的键盘子类型:

<input-method xmlns:android="http://schemas.android.com/apk/res/android"

        android:settingsActivity="com.example.softkeyboard.Settings"

        android:icon="@drawable/ime_icon"

    <subtype android:name="@string/display_name_english_keyboard_ime"

            android:icon="@drawable/subtype_icon_english_keyboard_ime"

            android:imeSubtypeLanguage="en_US"

            android:imeSubtypeMode="keyboard"

            android:imeSubtypeExtraValue="somePrivateOption=true"

    />

    <subtype android:name="@string/display_name_french_keyboard_ime"

            android:icon="@drawable/subtype_icon_french_keyboard_ime"

            android:imeSubtypeLanguage="fr_FR"

            android:imeSubtypeMode="keyboard"

            android:imeSubtypeExtraValue="foobar=30,someInternalOption=false"

    />

    <subtype android:name="@string/display_name_german_keyboard_ime"

            ...

    />

/>

使用%s来获得与子类型的语言标签相同的子类型标签,以便确保你的子类型在UI中被正确的标记。以下是输入法的部分XML文件:

    <subtype

        android:label="@string/label_subtype_generic"

        android:imeSubtypeLocale="en_US"

        android:icon="@drawable/icon_en_us"

        android:imeSubtypeMode="keyboard" />

以下是部分的IME的strings.xml文件。字符串资源label_subtype_generic被输入法的UI用于设置子类型的标签,定义如下:

<stringname="label_subtype_generic">%s</string>

这样在任何英语的语言环境中,就会把子类型的显示名称设置为“EnglishUnited States)”,或者是其他对应的语言。

 

你可能感兴趣的:(Android的文本和输入---创建输入法(四))