Разработка Android - как изменить раскладку клавиатуры при нажатии кнопки
Я работаю над клавиатурным приложением и хочу изменить макет после того, как пользователь нажмет определенную клавишу на клавиатуре. Проверьте изображения ниже
например :
Здесь - После того, как мы коснемся этой кнопки, макет изменится на этот
Кто-нибудь может объяснить мне, как это делается?
Это мой класс java, который расширяет Inputmethod Service
public class SimpleIME extends InputMethodService implements KeyboardView.OnKeyboardActionListener { private KeyboardView kv; private Keyboard keyboard; private int switchLock = 0; private boolean caps = false; @Override public void onKey(int primaryCode, int[] keyCodes) { InputConnection ic = getCurrentInputConnection(); playClick(primaryCode); switch (primaryCode) { case Keyboard.KEYCODE_DELETE: ic.deleteSurroundingText(1, 0); break; case Keyboard.KEYCODE_SHIFT: caps = !caps; keyboard.setShifted(caps); kv.invalidateAllKeys(); break; case Keyboard.KEYCODE_DONE: ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER)); break; default: char code = (char) primaryCode; if (Character.isLetter(code) && caps) { code = Character.toUpperCase(code); } ic.commitText(String.valueOf(code), 1); } } @Override public void onPress(int primaryCode) { } @Override public void onRelease(int primaryCode) { } @Override public void onText(CharSequence text) { } @Override public void swipeDown() { } @Override public void swipeLeft() { } @Override public void swipeRight() { } @Override public void swipeUp() { } @Override public View onCreateInputView() { kv = (KeyboardView) getLayoutInflater().inflate(R.layout.keyboard, null); keyboard = new Keyboard(this, R.xml.qwerty); kv.setKeyboard(keyboard); kv.setOnKeyboardActionListener(this); return kv; } private void playClick(int keyCode) { AudioManager am = (AudioManager) getSystemService(AUDIO_SERVICE); switch (keyCode) { case 32: am.playSoundEffect(AudioManager.FX_KEYPRESS_SPACEBAR); break; case Keyboard.KEYCODE_DONE: case 10: am.playSoundEffect(AudioManager.FX_KEYPRESS_RETURN); break; case Keyboard.KEYCODE_DELETE: am.playSoundEffect(AudioManager.FX_KEYPRESS_DELETE); break; default: am.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD); } } }
Что я уже пробовал:
Я попытался вызвать метод UpdateInputView, чтобы изменить макет, но это не сработало.