除谷歌应用程序外,泰米尔语Android键盘崩溃

时间:2016-06-28 13:39:11

标签: android android-service custom-keyboard

我使用Android服务创建了泰米尔语键盘。

它在谷歌应用程序中运行良好。在所有其他应用程序中,键入3到10个字符后崩溃。 如果我从谷歌应用程序复制字符并粘贴到其他应用程序中,即使我再次键入相同的字符串也不会崩溃。再次删除时,它会到达该点并崩溃。

我尝试输入字符串"தமிழுக்குகு்ஏது"。在打字时总是崩溃"ஏ"有时会在"நி,க,ர்"

崩溃

在whatsapp中,我试图输入泰米尔语。给空间后,如果我开始输入一个新单词,前一个单词的最后一个单词会自动从字母中分割出来。附上截图。 在谷歌应用程序中它没有发生(不分裂)。

该应用只能运行服务。我无法启用调试器来查找崩溃。 我打印了键入后传递的代码。代码正常运行并打印出来。即使是最后按下的代码也会在崩溃之前进行。

如果有人遇到同样的问题并且你们已经修好了,请分享你的经验。

before start typing the second word

after started typing the word is like

代码: qwerty xml:

 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
     android:keyWidth="10%p"
     android:horizontalGap="0px"
     android:verticalGap="0px"
     android:keyHeight="40dp"
     >
     ....<!--above rows-->
    <Row>
         <Key android:codes="2946" android:keyLabel="்" android:keyWidth="9%p" android:keyEdgeFlags="left"/>
         <Key android:codes="3006" android:keyLabel="ா"/>
         <Key android:codes="3007" android:keyLabel="ி" android:keyWidth="9%p"/>
         <Key android:codes="3008" android:keyLabel="ீ" android:keyWidth="9%p"/>
         <Key android:codes="3009" android:keyLabel="ு" android:keyWidth="9%p"/>
         <Key android:codes="3010" android:keyLabel="ூ" android:keyWidth="9%p"/>
         <Key android:codes="3014" android:keyLabel="ெ" android:keyWidth="11%p"/>
         <Key android:codes="3015" android:keyLabel="ே" android:keyWidth="11%p"/>
         <Key android:codes="3016" android:keyLabel="ை" android:keyWidth="11%p"/>
         <Key android:codes="2964" android:keyLabel="ஔ" android:keyWidth="12%p" android:keyEdgeFlags="right" />

         ....<!--bottom rows-->
     </Row>
 </Keyboard>

方法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>

layout xml:

 <?xml version="1.0" encoding="UTF-8"?>
 <android.inputmethodservice.KeyboardView
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/keyboard"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_alignParentBottom="true"
     android:keyPreviewLayout ="@layout/preview"/>

Java类文件:

 public class SimpleIME extends InputMethodService
    implements KeyboardView.OnKeyboardActionListener {

private KeyboardView kv;
private Keyboard keyboard;

private boolean caps = false;

@Override
public View onCreateInputView() {
    kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);
    keyboard = new Keyboard(this, R.xml.qwerty);
    kv.setKeyboard(keyboard);
    kv.setOnKeyboardActionListener(this);
    return kv;
}

private void playClick(int keyCode){
    AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);
    switch(keyCode){
        case 32:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR);
            break;
        case Keyboard.KEYCODE_DONE:
        case 10:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN);
            break;
        case Keyboard.KEYCODE_DELETE:
            am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE);
            break;
        default: am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD);
    }
}


@Override
public void onKey(int primaryCode, int[] keyCodes) {
    InputConnection ic = getCurrentInputConnection();
    playClick(primaryCode);
    switch(primaryCode){
        case Keyboard.KEYCODE_DELETE :
            ic.deleteSurroundingText(1, 0);
            break;
        case Keyboard.KEYCODE_SHIFT:
            caps = !caps;
            keyboard.setShifted(caps);
            kv.invalidateAllKeys();
            break;
        case Keyboard.KEYCODE_DONE:
            ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
            break;
        default:
            char code = (char)primaryCode;
            if(Character.isLetter(code) && caps){
                code = Character.toUpperCase(code);
            }
            ic.commitText(String.valueOf(code),1);
     }
  }
}

0 个答案:

没有答案