Заглавная буква для 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 смотрите этот ответ.

Другие вопросы по тегам