В настоящее время я работаю над собственной реализацией Input Method Editor (IME)
или может называться Softkeyboard
в Android, я прочитал создание метода ввода, и я скачал the SoftKeyboard sample code provided as part of the SDK
. У меня есть следующий код из пример программной клавиатуры:
private void handleCharacter(int primaryCode, int[] keyCodes) {
if (isInputViewShown()) {
if (mInputView.isShifted()) {
primaryCode = Character.toUpperCase(primaryCode);
}
}
if (isAlphabet(primaryCode) && mPredictionOn) {
/**
* Swapping here with my desired unicode character
* */
if (primaryCode >= 97 && primaryCode <= 122 ) {
mComposing.append(Swap.swapLetters(primaryCode));
}else{
mComposing.append((char) primaryCode);
}
getCurrentInputConnection().setComposingText(mComposing, 1);
updateShiftKeyState(getCurrentInputEditorInfo());
updateCandidates();
} else {
getCurrentInputConnection().commitText(
String.valueOf((char) primaryCode), 1);
}
}
приведенный выше код работает нормально, но когда я нажимаю клавишу:
<Key android:codes="-1"
android:keyWidth="15%p" android:isModifier="true"
android:isSticky="true" android:keyEdgeFlags="left"/>
что похоже на клавишу Shift
, это преобразует клавиши в верхний регистр. Я не знаю, как показать мои следующие клавиши, эта клавиша нажата/нажата, следующее Logcat
исключения:
Я проследил, что это может происходить в том месте, где мы обрабатываем ключ Shift
:
private void handleShift() {
if (mInputView == null) {
return;
}
Keyboard currentKeyboard = mInputView.getKeyboard();
if (mQwertyKeyboard == currentKeyboard) {
// Alphabet keyboard
checkToggleCapsLock();
mInputView.setKeyboard(mSindhi);
} else if (currentKeyboard == mSymbolsKeyboard) {
mSymbolsKeyboard.setShifted(true);
mInputView.setKeyboard(mSymbolsShiftedKeyboard);
mSymbolsShiftedKeyboard.setShifted(true);
} else if (currentKeyboard == mSymbolsShiftedKeyboard) {
mSymbolsShiftedKeyboard.setShifted(false);
mInputView.setKeyboard(mSymbolsKeyboard);
mSymbolsKeyboard.setShifted(false);
}
}
теперь я понятия не имею, как избавиться от исключения, упомянутого выше, и заставить мой код работать. Пожалуйста, решите это!