当我在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。
Edit 2:我用inputmethodhint()进行了测试,唯一有效的是ImhNoAutoUppercase。但它仍然以一个大写字符开头,当按下后退键(删除最后一个字符)时,键盘将再次切换为大写字符,即使您已经键入了几个字母。在第一个字母之后,它会切换为小写,如果你不按后退键,它基本上可以正常工作。
Edit:一个比较好的解决方法是设置ImhNoAutoUppercase
,第一个字母仍然是大写的,但至少你键入的下一个字母将是小写的。
原始答:在Android中,这将设置使用inputType在EditText的布局文件的xml中的活动/片段(屏幕/页面你正在看)。你可以访问和编辑布局文件直接为Android?
是否使用setInputMask()来控制输入类型?强制使用小写(或切换大小写转换)可能会提供使用大写或小写的选项。我猜在Android布局xml文件中设置的是inputType=" textcapsentence "或类似的东西(https://developer.android.com/training/keyboard-input/style.html)。
UPDATE:你提到这个问题在5.4中被修复了。这看起来像是可以修复它的提交。我建议只实现这里所示的修复。https://qt.gitorious.org/qt/qtbase/commit/2b3f293d892c5268bd2a07ed17fa9fc5adacbd76
你提到你很高兴编辑Qt源代码。我认为错误可能在src/org/qtproject/qt5/android/qtactical vitydelegate .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并用试错法替换它们。