Предложения клавиатуры приводят к тому, что часть сообщения Android EditText.setError() не отображается

Когда я использую edittext.setError("enter a comment") в андроиде работает нормально, пока не появятся подсказки клавиатуры и ошибка не появится выше edittext, после которого не отображается сообщение об ошибке полностью.

Почему он это делает?

После ввода в текстовое поле всплывающее окно теперь появляется над текстовым полем

5 ответов

Решение

setError
Устанавливает правую составную часть рисования TextView на значок "ошибка" и устанавливает сообщение об ошибке, которое будет отображаться во всплывающем окне, когда TextView имеет фокус. Значок и сообщение об ошибке будут сброшены на ноль, если какие-либо ключевые события вызовут изменения в тексте TextView. Если ошибка равна нулю, сообщение об ошибке и значок будут удалены.

Поэтому, когда текст изменен, его не должно быть. Я не знаю, почему этого не происходит в вашем случае.

Он также должен быть очищен, когда сообщение об ошибке равно нулю, поэтому один прием может быть:

edittext = (EditText)findViewById(R.id.foo); // add below this line
edittext.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {}
    public void beforeTextChanged(CharSequence s, int start, int count, int after){}
    public void onTextChanged(CharSequence s, int start, int before, int count){
        if(s != null && s.length() > 0 && edittext.getErrorMessage() != null) {
            edittext.setErrorMessage(null);
        }
    }
}); 

@ Энди Лобел: Я также столкнулся с этой проблемой и должен исправить ее, поставив пробелы (10-12) в конце текста, чтобы усечение происходило только для пробелов:) Кроме того, мой setError выглядел лучше, сделав setError text и EditText выровнены.

Другой случай: я застрял в другой проблеме, в которой отображается значок для рисования, но это плавающее сообщение и его прямоугольное поле не отображаются.

Мой Макет содержал:

1) Имя пользователя Редактировать текст

2) Пароль Редактировать текст

3) Подтвердите пароль Редактировать текст

4) Кнопка регистрации

Итак, я проверял и показывал ошибку во время нажатия на кнопку "Регистрация", но обнаружил, что сообщение не появилось и его можно было нарисовать только для рисования, и обнаружил, что сообщение будет отображаться только тогда, когда редактируемый текст можно фокусировать как:

В соответствии с setError API Description:- Устанавливает правую составную часть рисования TextView на иконку "error" и устанавливает сообщение об ошибке, которое будет отображаться во всплывающем окне "когда TextView имеет фокус".

Итак, сообщение было для UserName Edit Text, но последний акцент оставался на Подтверждении Password Edit Text, поэтому он так и не появился

Решение / настройка для такого случая заключается в следующем:

EditText.setFocusableInTouchMode(true);
EditText.requestFocus();
EditText.setError("My Error Text");

Примечание. Написал на тот случай, если вы застряли в этом вопросе, хотя другие решения могут быть доступны, и извините за столько изменений, так как это лучшее из возможных решений, которое я наконец-то нашел.

Я потратил много времени, пробуя разные вещи, чтобы это исправить...

Простое решение: - убедитесь, что ваш текст ошибки действительно очень короткий

Исправление, которое заставляет все это работать:

Когда Android отображает программную клавиатуру, представление с вашим текстом редактирования "перемещается" вверх... и текст ошибки перемещается вместе с этим. Усечение обычно происходит как часть этого. Вы можете легко исправить это, поместив весь макет в скобку ScrollView... таким образом, Android может переместить ваш EditText вверх, прокрутив его по всему макету - и тогда сообщение об ошибке будет отображаться полностью. Попробуйте - это действительно работает.

PS: мне нравится, что вы опубликовали скриншот своей проблемы. Делает вещи намного проще.

Другое решение:
Добавление android:windowSoftInputMode="adjustResize"на тег активности в AndroidManifest.xmlисправил проблему для меня

Задавать inputType="" значение для EditText с соответствующим значением android:inputType="textEmailAddress" и всплывающее окно исчезнет при вводе первого символа.

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