Ниже приведен код, который я использую, чтобы добавить 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);
}
}
});
Проблема
Когда я нажму клавишу, все идет, как ожидалось; как значок ключа, так и состояние «смещения».
Однако, когда я нажимаю любую другую клавишу (которая, как предполагается, отключается), состояние смещения изменяется на выключение, но значок не изменяется на неперемещенную версию. Я испытываю ту же проблему при использовании текста вместо значков.
Я пробовал звонить postInvalidate()
на моем KeyboardView
, но безрезультатно.
Вот video, который подчеркивает мою проблему.
является ваш метод shiftOn() работает. Я имею в виду, что вы получаете журнал Shifting On/Off? –