Qt Android: виртуальная клавиатура продолжает переключаться в верхний регистр, когда я набираю QLineEdit

Когда я набираю QLineEdit, виртуальная клавиатура начинается с заглавной буквы. Даже если я установлю его в нижний регистр, он вернется в верхний регистр, как только я наберу один символ. То есть каждый раз, когда я набираю символ, клавиатура снова сбрасывается в верхний регистр.

Это происходит даже на недавно созданный проект (Я просто ставлю строку редактирования и запускаю ее).

Я нашел ветку форума о той же проблеме — https://groups.google.com/forum/#!topic/android-qt/QMFZmkACAIA.

Я использую Qt / C ++ (не QML).

Редактировать: Только что протестировал его на новом проекте QML, ошибка тоже есть. Я также нашел ветку об этом для QML — https://groups.google.com/forum/#!msg/android-qt/BzGDGoLNtYc/TdtOX9MW3vIJ.

Изменить 2: Я проверил с inputMethodHints (), и единственный, который имел эффект, был ImhNoAutoUppercase. Но затем он все еще начинался с заглавной буквы, и при нажатии кнопки «назад» (чтобы удалить последний символ) клавиатура снова переключится на заглавную, даже если вы набрали несколько букв. После первой буквы он переключается в нижний регистр, и если вы не нажмете кнопку «Назад», он работает в основном ОК.

7

Решение

Редактировать: Несколько хороший обходной путь ImhNoAutoUppercaseпервая буква все еще заглавная, но, по крайней мере, следующие введенные вами буквы будут строчными.

Оригинальный ответ:
В Android это можно установить с помощью inputType для EditText в xml файла макета для Activity / Fragment (экран / страница, которую вы просматриваете). Можете ли вы получить доступ и редактировать файл макета напрямую для Android?

Вы используете setInputMask () для управления типом ввода? Может случиться так, что принудительное использование строчных букв (или переключение преобразования регистра) дает возможность использовать верхний или нижний регистр. Я предполагаю, что в XML-файле макета Android задано значение inputType = «textCapSentences» или что-то подобное ( https://developer.android.com/training/keyboard-input/style.html ).

ОБНОВЛЕНИЕ: Вы упоминаете, что проблема исправлена ​​в 5.4. Это похоже на коммит, который бы это исправил. Я бы предложил просто внедрить исправления, показанные здесь. https://qt.gitorious.org/qt/qtbase/commit/2b3f293d892c5268bd2a07ed17fa9fc5adacbd76

Вы упоминаете, что рады редактировать исходный код Qt. Я думаю, что ошибка может быть в этой части src / org / qtproject / qt5 / android / QtActivityDelegate.java

        if ((inputHints & ImhUppercaseOnly) != 0) {
initialCapsMode |= android.text.TextUtils.CAP_MODE_CHARACTERS;
inputType |= android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS;
} else if ((inputHints & ImhLowercaseOnly) == 0 && (inputHints & ImhNoAutoUppercase) == 0) {
initialCapsMode |= android.text.TextUtils.CAP_MODE_SENTENCES;
inputType |= android.text.InputType.TYPE_TEXT_FLAG_CAP_SENTENCES;
}

Должен быть изменен на:

        if ((inputHints & ImhUppercaseOnly) != 0) {
initialCapsMode |= android.text.TextUtils.CAP_MODE_CHARACTERS;
inputType |= android.text.InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS;
} else if ((inputHints & ImhLowercaseOnly) == 0 && (inputHints & ImhNoAutoUppercase) == 0) {
//initialCapsMode |= android.text.TextUtils.CAP_MODE_SENTENCES; // not sure what to set here - could try 0 or null if commenting out line doesn't work
inputType |= android.text.InputType.TYPE_CLASS_TEXT;
}

Если это не помогает, я рекомендую поискать в исходном коде android.text.InputType.TYPE_TEXT_FLAG_CAP или android.text.TextUtils.CAP_MODE и заменить их методом проб и ошибок.

1

Другие решения


По вопросам рекламы [email protected]