软键盘长按退格键的工作原理如何?

时间:2016-09-04 16:44:35

标签: android android-softkeyboard ime long-press

我正在Android上创建一个输入法,我想实现长按退格键以逐个删除字符而不释放(我认为默认行为是删除一个字符时按退格键)。

我当前的解决方案是“覆盖”我的子类“KeyboardView”中的“onLongPress”函数,并且当长按代码“KEYCODE_DELETE”被触发时,调用一个继续运行删除来向视图发送删除操作。正如我的代码如下:

    @Override
protected boolean onLongPress(Key key) {
    if (key.codes[0] == Keyboard.KEYCODE_DELETE) {
        final Handler h = new Handler();
        final int delay = 500;
        h.postDelayed(new Runnable() {
            public void run() {
                h.postDelayed(this, delay);
                getOnKeyboardActionListener().onKey(Keyboard.KEYCODE_DELETE, null);
            }
        }, delay);
        return true;
    } else {
        return super.onLongPress(key);
    }
}

所以,我的问题是“如何阻止它?”如何在退格键上跟踪长按的释放?或者有没有办法让长按删除发生?

1 个答案:

答案 0 :(得分:2)

我正在学习.n
它似乎有用,但我不确定它是否正确。

使用android:isRepeatable="true"
您不必使用onLongPress onKey的工作方式相同。

XML

<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
          android:horizontalGap="0px" android:verticalGap="0px"
          android:keyWidth="100%p"    android:keyHeight="70dp">
    <Row>
        <Key android:codes="-5" android:keyIcon="@drawable/ic_action_name" android:isRepeatable="true">
    </Row>
</Keyboard>

java class

@Override
public void onKey(int primaryCode, int[] keyCodes) {
    InputConnection ic = getCurrentInputConnection();

    switch(primaryCode) {
        case Keyboard.KEYCODE_DELETE:
            ic.deleteSurroundingText(1, 0);
            break;
    }
}