编辑:一个很好的解决方法是设置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 的源代码,并通过反复试验替换它们。