Заглавная буква для EditText с вводом GBoard
Я пытаюсь настроить "заглавную букву" программно (потому что у меня есть набор EditText
в ListView
)
Есть много тем, связанных с этой проблемой, и самая известная , я думаю. Я пробовал решения, предоставленные там и
setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_FLAG_CAP_SENTENCES)
действительно помогает. Исключение - когда пользователь использует GBoard
(клавиатура Google) это не поможет. (Автокапитализация не выключена)
Итак, возможно ли заставить его работать на GBoard
? или, может быть... это возможно press shift
прогроматически, когда нет текста в edittext
?
1 ответ
Я не проверял это, но, возможно, попытался переопределить слушателя для ввода в тексте редактирования и просто быстро удалить -> capitialize letter -> и снова поместить в текст редактирования.
Я думаю, что это должно быть возможно сделать так и будет работать на любой клавиатуре.
У меня была та же проблема с Gboard, и я решил ее следующим образом:
final EditText editText = (EditText) findViewById(R.id.editText);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Check if the entered character is the first character of the input
if(start == 0 && before == 0){
//Get the input
String input = s.toString();
//Capitalize the input (you can also use StringUtils here)
String output = input.substring(0,1).toUpperCase() + input.substring(1);
//Set the capitalized input as the editText text
editText.setText(output);
//Set the cursor at the end of the first character
editText.setSelection(1);
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
Обратите внимание, что это только обходной путь, если вам действительно нужно выполнить работу на клавиатурах, которые не поддерживают стандартный способ ввода заглавной буквы.
Он вводит заглавные буквы первого символа (цифры и специальные символы игнорируются). Единственный недостаток в том, что на клавиатуре (в нашем случае Gboard) по-прежнему отображаются строчные буквы.
Для лучшего объяснения параметров onTextChanged смотрите этот ответ.