Предложения клавиатуры приводят к тому, что часть сообщения Android EditText.setError() не отображается
Когда я использую edittext.setError("enter a comment")
в android, он отлично работает до тех пор, пока не появятся предложения клавиатуры и ошибка будет превышена над edittext
, после чего она не отобразит все сообщение об ошибке.
Почему он это делает?
![After entering into the textbox, the balloon pop-up now appears above the textbox]()
Ответы
Ответ 1
setError
Устанавливает правое соединение, пригодное для текста TextView, к значку "ошибка" и устанавливает сообщение об ошибке, которое будет отображаться во всплывающем окне, когда TextView имеет фокус. Значок и сообщение об ошибке будет reset равным нулю, если любые ключевые события вызывают изменения в Текст TextView. Если ошибка равна нулю, сообщение об ошибке и значок будут очищается.
Итак, когда текст изменен, он должен исчезнуть. Я не знаю, почему этого не происходит в вашем случае.
Он также должен быть очищен, если сообщение об ошибке равно null, поэтому один трюк может быть:
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);
}
}
});
Ответ 2
@Энди Лобель:
Я также столкнулся с этой проблемой и исправил ее, добавив белые пробелы (10-12) в конец текста, поэтому усечение произошло только с белыми пробелами:) Кроме того, мой setError выглядел лучше, создав текст setError и EditText выровнены.
Другое дело: Я застрял в другой проблеме, в которой отображается отображаемый значок, но это плавающее сообщение и его прямоугольное поле не отображаются.
Мой макет содержит:
1) Имя пользователя Редактировать текст
2) Редактирование пароля
3) Подтверждение пароля Редактировать текст
4) Кнопка регистрации
Итак, я проверял и показывал ошибку во время нажатия кнопки "Регистрация"
но выяснилось, что сообщение не появилось и доступно только для рисования
и обнаружил, что сообщение появится только тогда, когда Редактирование текста будет сфокусировано как:
В соответствии с API setError Описание: -
Устанавливает правое соединение с текстом TextView на значок ошибки и устанавливает сообщение об ошибке, которое будет отображаться во всплывающем окне , когда TextView имеет фокус.
Итак, сообщение предназначалось для UserName Edit Text, но последний фокус остался на экране Confirm Password Edit, поэтому он никогда не показывался
Решение/tweak для такого случая было бы:
EditText.setFocusableInTouchMode(true);
EditText.requestFocus();
EditText.setError("My Error Text");
Примечание.. Написал, на всякий случай, если вы застряли в этом вопросе, хотя другие решения могут быть доступны и извините за столь большое количество изменений, что это наилучшее возможное решение, которое я пришел наконец.
Ответ 3
Я потратил много времени, пытаясь исправить это...
Легкое исправление:
- убедитесь, что текст ошибки действительно очень короткий
Исправление, из-за которого все это работает:
Когда Android отображает экранную клавиатуру, вид с текстом редактирования "перемещается" вверх... и текст ошибки перемещается вместе с этим. Усечение обычно происходит как часть этого. Вы можете легко исправить это, разместив весь свой макет в скобке ScrollView... таким образом, Android может перемещать ваш EditText, прокручивая его со всей компоновкой, - и затем сообщение об ошибке будет полностью отображено, Попробуйте - это действительно работает.
P.S: Мне нравится, что вы опубликовали скриншот своей проблемы. Делает вещи намного легче.
Ответ 4
Другое решение:
Добавление android:windowSoftInputMode="adjustResize"
по тегу активности в AndroidManifest.xml
исправил проблему для меня
Ответ 5
Задайте значение inputType=""
для EditText
с соответствующим значением android:inputType="textEmailAddress"
, и всплывающее окно исчезнет при вводе первого символа.