以下是我用来向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。
答案 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);
}
如果这不起作用或者这不是您想要的,您可以提供更多信息吗?