7

QLineEdit を入力すると、仮想キーボードが大文字で始まります。小文字に設定しても、1 文字入力するとすぐに大文字に戻ります。つまり、文字を入力するたびに、キーボードが再び大文字にリセットされます。

これは、新しく作成されたプロジェクトでも発生します(行編集を入れて実行するだけです)。

同じ問題に関するフォーラム スレッドを見つけました - 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 だけでした。しかし、それはまだ大文字で始まり、(最後の文字を削除するために)戻るボタンを押すと、たとえ複数の文字を入力したとしても、キーボードは再び大文字に切り替わります. 最初の文字の後は小文字に切り替わり、戻るボタンを押さなければほとんど問題なく動作します。

4

1 に答える 1

1

編集:やや良い回避策は設定ですImhNoAutoUppercase。最初の文字は引き続き大文字ですが、少なくとも次に入力する文字は小文字になります。

元の回答: Android では、Activity/Fragment (画面/ページ) のレイアウト ファイルの xml で EditText の inputType を使用して設定されます。Android のレイアウト ファイルに直接アクセスして編集できますか?

入力タイプを制御するために setInputMask() を使用していますか? 小文字を強制する (または大文字と小文字の変換を切り替える) と、大文字または小文字を使用するオプションが与えられる場合があります。Android レイアウト xml ファイルに設定されているのは、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 を検索し、試行錯誤してそれらを置き換えることをお勧めします。

于 2015-01-14T14:09:01.543 に答える