【问题标题】:How the soft keyboard long press backspace works?软键盘长按退格是如何工作的?
【发布时间】:2016-09-04 16:44:35
【问题描述】:

我正在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);
    }
}

所以,我的问题是“如何阻止它?”如何跟踪长按退格键的释放?或者有什么办法可以实现长按删除?

【问题讨论】:

    标签: android android-softkeyboard ime long-press


    【解决方案1】:

    我正在学习中。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类

    @Override
    public void onKey(int primaryCode, int[] keyCodes) {
        InputConnection ic = getCurrentInputConnection();
    
        switch(primaryCode) {
            case Keyboard.KEYCODE_DELETE:
                ic.deleteSurroundingText(1, 0);
                break;
        }
    }
    

    【讨论】:

    • 经过多次搜索,我找到了我的解决方案,非常感谢。这就是我需要的。
    猜你喜欢
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2012-05-23
    • 2015-11-20
    • 1970-01-01
    • 2011-11-08
    相关资源
    最近更新 更多