Предложения клавиатуры заставляют часть сообщения Android EditText.setError () не отображаться - PullRequest
12 голосов
/ 13 октября 2011

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

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

After entering into the textbox, the balloon pop-up now appears above the textbox

Ответы [ 5 ]

16 голосов
/ 13 октября 2011

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);
        }
    }
}); 
6 голосов
/ 19 марта 2012

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

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

Содержимое моего макета:

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

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

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

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

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

В соответствии с описанием API setError: - Устанавливает правый составной элемент рисования TextView на значок «ошибка» и устанавливает сообщение об ошибке, которое будет отображаться во всплывающем окне ', когда TextView имеет фокус'.

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

Решение / настройка для такого случая было бы:

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

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

4 голосов
/ 11 июля 2012

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

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

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

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

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

1 голос
/ 20 января 2016

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

0 голосов
/ 07 августа 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...