sas*_*alm 7 c++ qt android android-virtual-keyboard
当我输入QLineEdit时,虚拟键盘以大写字母开头.即使我将其设置为小写,只要我输入单个字符,它就会返回大写.也就是说,每次键入一个字符时,键盘都会重置为大写.
即使在新创建的项目中也会发生这种情况(我只是进行了一次编辑并运行它).
我找到了一个关于同一问题的论坛帖子 - https://groups.google.com/forum/#!topic/android-qt/QMFZmkACAIA.
我正在使用Qt/C++(不是QML).
编辑:刚刚在一个新的QML项目上测试过它,那里也存在bug.我还发现了一个关于QML的帖子 - https://groups.google.com/forum/#!msg/android-qt/BzGDGoLNtYc/TdtOX9MW3vIJ.
编辑2:我使用inputMethodHints()测试,唯一有效的是ImhNoAutoUppercase.但是它仍然以一个大写字母开头,当按下后退按钮(删除最后一个字符)时,键盘将再次切换为大写,即使你输入了几个字母.在第一个字母后,它切换到小写,如果你没有按下后退按钮,它的工作原理很好.
编辑:一个好的解决方法是设置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;
}
Run Code Online (Sandbox Code Playgroud)
应改为:
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;
}
Run Code Online (Sandbox Code Playgroud)
如果这不能解决问题,我建议搜索 android.text.InputType.TYPE_TEXT_FLAG_CAP 或 android.text.TextUtils.CAP_MODE 的源代码,并通过反复试验替换它们。
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |