Android键盘输出unicode字符串和带有不支持字形的标签

时间:2013-11-13 20:21:53

标签: android unicode android-input-method

我正在开发一种Android IME,它适用于美国本土语言,其字符不是单个unicode代码点,而是unicode字符串。例如,一个声门化的禁止lambda:ƛ̕

我发现自己处于catch-22中,因为我可以创建一个输出正确字符但没有正确标签的Key,或者我可以使用正确的标签,但输出错误。我应该说我一直试图在xml中完成这个,我认为相关的属性是:

  • android:codes
  • android:keyLabel
  • android:keyOutputText
  • android:keyIcon

更多细节:

从我能够找到的内容来看,无法更改keyLabel上的字体,因为系统的DEFAULT_BOLD字体已硬编码到Keyboard类中。因此,我无法使用以下内容来正确定义密钥:

<Key android:keyOutputText="@string/glot_barred_lambda"
     android:keyLabel="@string/glot_barred_lambda"/>

(其中字符串常量glot_barred_lambda在相关位置定义为“ƛ̕”)

问题是默认的Android字体不支持此字形。

因此我认为我必须为关键标签制作一个图标。我这样做了。但是,此定义给出了NullPointerError:

<Key android:keyOutputText="@string/glot_barred_lambda" 
     android:keyIcon="@drawable/keyboard_barred_lambda" />`

问题似乎是keyOutputTextkeyIcon不兼容。 (我不知道为什么!)。所以这让我试着这个:

<Key android:codes="411,789" 
     android:keyIcon="@drawable/keyboard_barred_lambda" />

这编译并运行正常,但没有给出正确的行为。关键标签看起来很棒,但输出只是单击时的禁止lambda(411),而只是在双击(789)上组合变音符号。

我的想法已经用完,所以我期待着真正的专家提出一些建议。非常感谢阅读,我很乐意澄清我的问题,因为你们需要我。

1 个答案:

答案 0 :(得分:1)

我找到了一个可能有点像kludge的答案,但它可以工作并允许输出unicode字符串并将图标作为标签的Keys所需的功能。

由于android:keyOutputText无法处理具有android:keyIcon的密钥,因此我被迫使用android:codes。虽然android:codes没有输出字符串,但我发现我可以在XML中将负数作为个人代码分配,然后使用这些代码在java中分配我自己的输出文本。

例如,在XML中:

<Key android:codes="-1001" 
     android:keyIcon="@drawable/keyboard_barred_lambda" />
...

然后在handleCharacter中的IME.java中:

private void handleCharacter(int primaryCode, int[] keyCodes) {
    ...
    if (isAlphabet(primaryCode) && mPredictionOn) {
    ...
    } else {
        // handling composing characters here now because
        // android won't let us use an icon along with outputText
        // this is dirty!
        if(primaryCode == -1001) {
          getCurrentInputConnection().commitText("ƛ̕", 1);
        } else if(primaryCode == -1002) {
          getCurrentInputConnection().commitText("q̓", 1);
        // etc

我仍然有兴趣知道是否有更优雅的解决方案。但这终于让我为我的语言提供了一种有效的输入法。

另外,我已经向谷歌提交了有关键盘XML解析器的错误:

https://code.google.com/p/android/issues/detail?id=62294