Задать вопрос
@Chesterfield25

Почему не меняется высота клавиатуры не устанавливается CapsLock?

В файле исходного код со строки 692 устанавливается то что при открытие клавиатуры англ языка все буквы будут большими и в общем так оно и есть но когда я добавил еще несколько языковых раскладок и установил им идентичный код то они с переменны успехом при открытие становятся большими через раз, один раз при открытие клавиатуры могут быть большими один маленькими, причем если до добавления своего кода на анг языке работало все норм то теперь такие баги происходят и с ним.
https://github.com/maihannijat/AndroidKeyboard/blo...

Так же заметил что если я с больших букв переставляю на маленькие а потом меняю язык и выхожу с мессенджера потом захожу заново и переключаюсь на ту раскладку которую я оставил с маленькими буквами то она так и осталась с маленькими буквами. https://youtube.com/shorts/KMX7MwxjKNk?feature=share

Мой измененный код начиная с 662 строки https://github.com/maihannijat/AndroidKeyboard/blo...

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 == mSymbolsAFKeyboard || current == mSymbolsShiftedAFKeyboard)
                    && getSelectedSubtype() == mFarsiKeyboard) {
                setLatinKeyboard(mFarsiKeyboard);
                updateShiftIcon();
            } else if ((current == mSymbolsAFKeyboard || current == mSymbolsShiftedAFKeyboard)
                    && getSelectedSubtype() == mPashtoKeyboard) {
                setLatinKeyboard(mPashtoKeyboard);
                updateShiftIcon();
            } else if (current == mFarsiKeyboard || current == mPashtoKeyboard) {
                setLatinKeyboard(mSymbolsAFKeyboard);
                mSymbolsAFKeyboard.setShifted(false);
            } else if ((current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) && getSelectedSubtype() == mPashtoLatinKeyboard) {
                setLatinKeyboard(mPashtoLatinKeyboard);
                updateShiftIcon();
            } else if ((current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) && getSelectedSubtype() == mQwertyInhKeyboard) {
                setLatinKeyboard(mQwertyInhKeyboard);
                updateShiftIconInh();
            } else if ((current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) && getSelectedSubtype() == mQwertyRuKeyboard) {
                setLatinKeyboard(mQwertyRuKeyboard);
                updateShiftIconRu();
            } else if (current == mSymbolsKeyboard || current == mSymbolsShiftedKeyboard) {
                setLatinKeyboard(mQwertyKeyboard);
                updateShiftIcon();
            } else {
                setLatinKeyboard(mSymbolsKeyboard);
                mSymbolsKeyboard.setShifted(false);
            }


Мой код измененный с 810 строки https://github.com/maihannijat/AndroidKeyboard/blo...

private void handleShift() {
        if (mInputView == null) {
            return;
        }

        Keyboard currentKeyboard = mInputView.getKeyboard();
        if (mQwertyKeyboard == currentKeyboard) {
            // Alphabet keyboard
            checkToggleCapsLock();
            mInputView.setShifted(mCapsLock || !mInputView.isShifted());
            updateShiftIcon();
        } else if (currentKeyboard == mSymbolsKeyboard) {
            mSymbolsKeyboard.setShifted(true);
            setLatinKeyboard(mSymbolsShiftedKeyboard);
            mSymbolsShiftedKeyboard.setShifted(true);
        } else if (currentKeyboard == mSymbolsAFKeyboard) {
            mSymbolsKeyboard.setShifted(true);
            setLatinKeyboard(mSymbolsShiftedAFKeyboard);
            mSymbolsShiftedKeyboard.setShifted(true);
        } else if (currentKeyboard == mSymbolsShiftedAFKeyboard) {
            mSymbolsShiftedAFKeyboard.setShifted(false);
            setLatinKeyboard(mSymbolsAFKeyboard);
            mSymbolsAFKeyboard.setShifted(false);
        } else if (currentKeyboard == mSymbolsShiftedKeyboard) {
            mSymbolsShiftedKeyboard.setShifted(false);
            setLatinKeyboard(mSymbolsKeyboard);
            mSymbolsKeyboard.setShifted(false);
        } else if (mPashtoLatinKeyboard == currentKeyboard) {
            setLatinKeyboard(mPashtoLatinShiftedKeyboard);
            mActiveKeyboard = "ps_latin_AF_Shift";
            mPashtoLatinKeyboard.setShifted(false);
        } else if (mPashtoLatinShiftedKeyboard == currentKeyboard) {
            setLatinKeyboard(mPashtoLatinKeyboard);
            mActiveKeyboard = "ps_latin_AF";
            mPashtoLatinShiftedKeyboard.setShifted(false);
        } else if (mQwertyInhKeyboard == currentKeyboard) {
            // Alphabet keyboard
            checkToggleCapsLock();
            mInputView.setShifted(mCapsLock || !mInputView.isShifted());
            updateShiftIconInh();
        } else if (mQwertyRuKeyboard == currentKeyboard) {
            // Alphabet keyboard
            checkToggleCapsLock();
            mInputView.setShifted(mCapsLock || !mInputView.isShifted());
            updateShiftIconRu();
        }
    }


Метод checkToggleCapsLock() без изменений https://github.com/maihannijat/AndroidKeyboard/blo...

private void checkToggleCapsLock() {
        long now = System.currentTimeMillis();
        if (mLastShiftTime + 800 > now) {
            mCapsLock = !mCapsLock;
            mLastShiftTime = 0;
        } else {
            mLastShiftTime = now;
        }
    }


измененный методupdateShiftKeyState(EditorInfo attr) https://github.com/maihannijat/AndroidKeyboard/blo...

private void updateShiftKeyState(EditorInfo attr) {
        if (attr != null
                && mInputView != null && mQwertyKeyboard == mInputView.getKeyboard() || attr != null
                && mInputView != null && mQwertyInhKeyboard == mInputView.getKeyboard() || attr != null
                && mInputView != null && mQwertyRuKeyboard == mInputView.getKeyboard()) {
            int caps = 0;
            EditorInfo ei = getCurrentInputEditorInfo();
            if (ei != null && ei.inputType != InputType.TYPE_NULL) {
                caps = getCurrentInputConnection().getCursorCapsMode(attr.inputType);
            }
            mInputView.setShifted(mCapsLock || caps != 0);

            // Change Shift key icon - 2
            updateShiftIcon();
            updateShiftIconInh();
            updateShiftIconRu();
        }
    }


В общем частично удалось решить проблему в метод onStartInputView()
добавить updateShiftKeyState(attribute); таким образом если с маленькими буквами свернуть клавиатуру кнопкой назад а потом заново нажать на поле ввода то буквы снова становятся большими

@Override
    public void onStartInputView(EditorInfo attribute, boolean restarting) {
        super.onStartInputView(attribute, restarting);

        // Dismiss the Emoticons before showing the soft keyboard.
        closeEmoticons();

        mInputView.closing();
        final InputMethodSubtype subtype = mInputMethodManager.getCurrentInputMethodSubtype();
        mInputView.setSubtypeOnSpaceKey(subtype);
        updateShiftKeyState(attribute);
    }


Но если переключиться на маленькие буквы скажем на русском языке и начать менять язык то когда я вернусь снова на русский то маленькие буквы так и остаются маленькими.

В метод
onCurrentInputMethodSubtypeChanged(InputMethodSubtype subtype)
где идет переключение языков не получается установить updateShiftKeyState(attribute);
  • Вопрос задан
  • 48 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы