Как добавить функциональность переключения языка в программной клавиатуре Android?

Приложение Android Soft Keyboard в настоящее время имеет английский язык, и я изменяю его, чтобы добавить в него другой язык. Я почти закончил с версткой нового языка и добавлением алфавитов вручную, так как язык еще не включен в Android. Новый язык также имеет ключи, которые появляются с клавишей SHIFT. Я изо всех сил пытаюсь исправить функциональность переключения между двумя языками: английский и добавленный новый.

Я могу исправить это с помощью жесткого кодирования: изменить макет (xml) с помощью кнопки, а затем сделать снова наоборот, но я знаю, что это неправильный подход, так как switch функциональность.

Я предоставляю соответствующий код. Пожалуйста, прокомментируйте, если вам нужно больше кода для предоставления.

public void onKey(int primaryCode, int[] keyCodes) {
    if (isWordSeparator(primaryCode)) {
        // Handle separator
        if (mComposing.length() > 0) {
            commitTyped(getCurrentInputConnection());
        }
        sendKey(primaryCode);
        updateShiftKeyState(getCurrentInputEditorInfo());
    } else if (primaryCode == Keyboard.KEYCODE_DELETE) {
        handleBackspace();
    } else if (primaryCode == Keyboard.KEYCODE_SHIFT) {
        handleShift();
    } else if (primaryCode == Keyboard.KEYCODE_CANCEL) {
        handleClose();
        return;
    } else if (primaryCode == LatinKeyboardView.KEYCODE_LANGUAGE_SWITCH) {
        handleLanguageSwitch();
        return;
    } else if (primaryCode == LatinKeyboardView.KEYCODE_OPTIONS) {
        // Show a menu or something'
    } else if (primaryCode == Keyboard.KEYCODE_MODE_CHANGE
            && mInputView != null) {
        Keyboard current = mInputView.getKeyboard();
        if (current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) {
            setLatinKeyboard(mQwertyKeyboard);
        } else {
            setLatinKeyboard(mSymbolsKeyboard);
            mSymbolsKeyboard.setShifted(false);
        }
    }
}

Приложение основано на этом образце.

1 ответ

Решение

Я наконец разобрался с решением. Я добавил следующий код сразу после кода выше (код в вопросе) для переключения между языками:

else if (primaryCode == 10000) {
    Keyboard current = mInputView.getKeyboard();
    current = mQwertyNewKeyboard;
    mInputView.setKeyboard(current);

//Switch to qwerty (English Main)
}else if (primaryCode == 10001) {
    Keyboard current = mInputView.getKeyboard();
    current = mQwertyKeyboard;
    mInputView.setKeyboard(current);

//Switch to qwertyNewShift
}else if (primaryCode == 10002) {
    Keyboard current = mInputView.getKeyboard();
    current = mQwertyNewKeyboardShift;
    mInputView.setKeyboard(current);
}

И в файле макета (XML) каждого языка, я создал кнопку переключения и установил primaryCode соответственно.

<Key android:codes="10001" android:keyIcon="@drawable/sym_keyboard_language_switch" android:keyWidth="10%p"/>
Другие вопросы по тегам