当前位置:操作系统 > 安卓/Android >>

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>
 
这样在任何英语的语言环境中,就会把子类型的显示名称设置为“English(United States)”,或者是其他对应的语言。
 
 
 
补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,