Я новичок в программировании на Android и учусь делать собственную пользовательскую клавиатуру для Android из образца HackersKeyboard и SoftKeyboard .Я сталкиваюсь с проблемой авто-заглавных букв и не знаю, как ее преодолеть: когда пользователь нажимает где-нибудь на экране ввода, чтобы переместить курсор в начальную точку предложения, клавиатура должна быть автоматически смещена.
ПримерВо-первых, это предложение.Во-вторых, это тоже предложение.В-третьих, это тоже предложение.Когда пользователь нажимает на начало «Второго» (после точки и пробела от первого предложения), клавиатура должна автоматически перемещаться.
Для обычного набора текста, когда пользователь достигает конца предложения (отмеченного разделителем предложений, например:точка или вопросительный знак), я сделал это с приведенным ниже кодом в методе 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.