7

当我输入 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。但是它仍然以大写字符开头,当按下后退按钮(删除最后一个字符)时,即使您输入了几个字母,键盘也会再次切换到大写字母。在第一个字母之后它会切换为小写,如果你不按后退按钮,它基本上可以正常工作。

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 回答