键入键后关闭班次

时间:2013-12-16 00:04:14

标签: java android keyboard shift

以下是我用来向OnKeyboardActionListener添加KeyboardView的代码。 (为了简洁起见,我省略了我留空的所需重写方法。)

keyboardView.setOnKeyboardActionListener(new OnKeyboardActionListener() {

    private void shiftOn(boolean on) {
        System.out.println("Shifting " + (on ? "on" : "off"));
        keyboard.setShifted(on);
        shiftKey.icon = keyboard.isShifted() ? shiftLockDrawable : shiftDrawable;
    }

    @Override
    public void onKey(int primaryCode, int[] keyCodes) {

        Editable editable = editText.getEditableText();
        int selectionStart = editText.getSelectionStart();

        if (primaryCode == SHIFT) {
            shiftOn(!keyboard.isShifted());
        } else {
            if (primaryCode == DELETE) {
                if (editable != null && selectionStart > 0) {
                    editable.delete(selectionStart - 1, selectionStart);
                }
            } else {
                editable.insert(selectionStart, Character.toString((char) primaryCode));
            }

            shiftOn(false);
        }
    }
});

问题

当我按下shift键时,一切都按预期进行;键的图标和“移位”的状态都会改变。

然而,当我按下任何其他键(应该关闭移位)时,移位状态变为关闭,但图标不会更改为未移位版本。使用文本而不是图标时,我遇到了同样的问题。

我尝试在postInvalidate()上拨打KeyboardView,但无济于事。

这是一个突出我问题的video

3 个答案:

答案 0 :(得分:1)

我在shiftOn方法的末尾添加了以下代码:

keyboard.invalidateKey(SHIFT);

答案 1 :(得分:0)

在我看来,Shift键的重绘附加到实际的输入事件。您是否可以在代码中更改shiftKeyIcon而不是更改shift键?当按下另一个键时,您只需生成一个额外的shift键按下事件。

我希望这会对你有所帮助。

答案 2 :(得分:-1)

我认为shiftOn()存在问题。我不完全知道shiftLockDrawable和shiftDrawable做了什么,但可能以下代码可以正常工作

private void shiftOn(boolean on) {
    System.out.println("Shifting " + (on ? "on" : "off"));
    shiftKey.icon = (on ? shiftLockDrawable : shiftDrawable);
    keyboard.setShifted(on);
}

如果这不起作用或者这不是您想要的,您可以提供更多信息吗?