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));