我是 Android 编程的新手,正在学习从HackersKeyboard和SoftKeyboard示例中制作自己的 Android 自定义键盘。我面临自动大写问题,不知道如何解决这个问题:当用户点击输入屏幕中的某处以将光标移动到句子的开头时,键盘应该自动移动。
示例:首先,这是一个句子。其次,这也是一句话。第三,这也是一个句子。当用户点击“第二”的开头(在第一句的句号和空格之后),键盘应该自动移动。
对于正常打字,当用户到达句子的结尾(用句号或问号等句子分隔符标记)时,我在 onKey 方法中使用以下代码(在扩展 InputMethodService 的主类中):
@Override
public void onKey(int primaryCode, int[] keyCodes) {
InputConnection ic = getCurrentInputConnection();
switch(primaryCode){
case Keyboard.KEYCODE_DELETE :
CharSequence selectedText = ic.getSelectedText(0);
if (TextUtils.isEmpty(selectedText)) {
ic.deleteSurroundingText(1, 0);
} else {
ic.commitText("", 1);
}
break;
case Keyboard.KEYCODE_SHIFT:
bCaps = !bCaps;
myKeyboard.setShifted(bCaps);
myKeyboardView.invalidateAllKeys();
break;
case Keyboard.KEYCODE_DONE:
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
break;
default:
char code = (char)primaryCode;
if(Character.isLetter(code) && bCaps){
code = Character.toUpperCase(code);
}
ic.commitText(String.valueOf(code),1);
//--------------------------------------------
//Detect end of a sentence then shift keyboard.
//This is not done yet. It should turned back to lower after typing first letter of sentence.
//--------------------------------------------
CharSequence lastTwo = ic.getTextBeforeCursor(2, 0);
if (lastTwo == null || lastTwo.length()<=0 ||
(lastTwo.charAt(1) == ASCII_SPACE && isSentenceSeparator(lastTwo.charAt(0)))) {
bCaps = true;
myKeyboard.setShifted(bCaps);
myKeyboardView.invalidateAllKeys();
}
}
}
我找不到与此自动大写问题相关的示例HackersKeyboard和SoftKeyboard的任何部分。非常感谢任何帮助。非常感谢。
编辑:这与EditText 的首字母大写不同。Android 自定义键盘在服务级别上工作,主要目标是在全球范围内与各种 EditText 一起工作。