Android - Включение блокировки шапки (двойной щелчок, как) программно на Android

Этот вопрос отличается от всех других, уже задаваемых здесь.

Проблема и вопрос

Я хочу, чтобы при открытии клавиатуры дважды щелкнул (или долго нажимал) клавишу Shift, включив блокировку колпачков. Другой запрос заключается в том, что блокировка заглавных букв должна быть отключена, если пользователь нажимает клавишу Shift.

Я уже пробовал большинство предлагаемых решений в stackru, таких как android:inputType="textCapCharacters" или setAllCaps(true), но в действительности блокировка caps отключить невозможно. При использовании вышеуказанных решений при нажатии клавиши shift пользователь вводит один единственный символ в нижнем регистре, а затем система автоматически переводит клавиатуру обратно в верхний регистр.

Это не правильный способ, я хочу, я только хочу, чтобы заглавные буквы включались в первый раз, когда пользователь открывает клавиатуру, а затем он самостоятельно обрабатывает статус заглавных букв.

Заметка

Имейте в виду, что я начал вопрос с "как будто я дважды щелкаю (или долго нажимаю) клавишу Shift", потому что при использовании решения inputType у вас есть такая ситуация: введите описание изображения здесь Это не имеет черты белых заглавных букв, как если бы я вручную включить заглавные буквы: введите описание изображения здесь

1 ответ

Я нашел решение проблемы!

Я должен продолжать использовать android:inputType="textCapCharacters", но когда пользователь нажимает клавишу Shift и вводит один символ в нижнем регистре, textwatcher удаляет флаг textCapCharacters.

Как следовать за текстовым наблюдателем, который делает свое дело:

public class EditTextWatcher  implements  TextWatcher{

    private EditText editText;

    public PtlEditTextWatcher(EditText editText) {
        this.editText = editText;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) { }

    @Override
    public void afterTextChanged(Editable s) {
        if (editText != null && s.length() > 0 && (editText.getInputType() & InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS) > 0)
            if (Character.isLowerCase(s.toString().charAt(s.length() - 1)))
                editText.setInputType(editText.getInputType() & ~InputType.TYPE_TEXT_FLAG_CAP_CHARACTERS);
    }
}

простое использование это:

addTextChangedListener(new EditTextWatcher(myEditText));
Другие вопросы по тегам