EditText setError() со значком, но без всплывающего сообщения
Я хочу иметь некоторую проверку для моего EditText, в которой хочу показать "
" (появляется, когда вы помещаете editText.setError("blah blah"))
, но не хотите, чтобы текст во всплывающем меню отображал это "бла-бла".
Есть ли способ сделать это? Один из способов - создать пользовательский макет, который отобразит значок изображения в EditText. Но есть ли лучшее решение?
Ответы
Ответ 1
Проблема решена после большого количества исследований и перестановок - (Также благодаря @van)
Создайте новый класс, который расширит EditText
что-то вроде этого -
public class MyEditText extends EditText {
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void setError(CharSequence error, Drawable icon) {
setCompoundDrawables(null, null, icon, null);
}
}
Используйте этот класс как представление в вашем xml, как это -
<com.raj.poc.MyEditText
android:id="@+id/et_test"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
Теперь на третьем шаге просто установите TextWatcher
в свой пользовательский текстовый вид, например:
et = (MyEditText) findViewById(R.id.et_test);
errorIcon = getResources().getDrawable(R.drawable.ic_error);
errorIcon.setBounds(new Rect(0, 0, errorIcon.getIntrinsicWidth(), errorIcon.getIntrinsicHeight()));
et.setError(null,errorIcon);
et.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
if(s.toString().length()>6){
et.setError("", null);
}else{
et.setError("", errorIcon);
}
}
});
где R.drawable.ic_error
= ![1luXA.png]()
Сохранение текста null разрешает проблему
Но если мы сохраняем только null в setError (null), это не покажет ошибку проверки; он должен быть нулевым вместе со вторым параметром.
Ответ 2
Вам не нужно создавать новый класс EditText
или изменить xml. Решение очень просто:
Edittext editText= (EditText) rootView.findViewById(R.id.email);
String str= editText.getText().toString();
if(str.equalsIgnoreCase("") ){
Drawable dr = getResources().getDrawable(R.drawable.error);
//add an error icon to yur drawable files
dr.setBounds(0, 0, dr.getIntrinsicWidth(), dr.getIntrinsicHeight());
editText.setCompoundDrawables(null,null,dr,null);
}
Ответ 3
Извините Rajkiran, но ваше решение не работает над версией Android 4.2. Если я пытаюсь установить значение null
для ошибки, оно даже не отображается. Решение, которое я выбрал, заключалось в расширении EditText
и переопределении метода setError
. Нет. У меня есть только индикатор ошибки без всплывающего окна.
@Override
public void setError(CharSequence pError, Drawable pIcon) {
setCompoundDrawables(null, null, pIcon, null);
}
Ответ 4
Я имел дело с той же проблемой. Я хотел использовать .setError()
для моего EditText
, когда пользователь вводит нулевой ввод. Но я думаю, что всплывающее сообщение раздражает, особенно если у вас больше EditText
s.
Мое решение было наивным и простым, но оно работало на всех устройствах, которые я пробовал до сих пор.
Я создал свой собственный класс myEditText и просто @Override
этот метод:
@Override
public void setError(CharSequence error, Drawable icon) {
setCompoundDrawables(null, null, icon, null);
}
то используйте в layout.xml
<cz.project.myEditText
...
/>
и, наконец, в моем коде
Я помещал onFocusChangeListener
в myEditText
, поэтому, когда кто-то нажимает кнопку, значок исчезает.
myEditText input = (myEditText) findViewById(R.id.input);
input.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
input.setError(null);
});
if(val == null) input.setError("");
Он работает Точно, как я хочу = нет всплывающего сообщения, когда .setError()
вызывается на EditText
.
Ответ 5
Чтобы получить только значок ошибки без всплывающего окна с сообщением об ошибке , только когда setError("")
вызывается (т.е. установите пустую строку как сообщение об ошибке), я использую специальный класс EditText, где Я переопределяю setError(CharSequence, Drawable)
следующим образом:
@Override
public void setError(CharSequence error, Drawable icon) {
if (error == null) {
super.setError(null, icon);
setCompoundDrawables(null, null, null, null);
}
else if (error.toString().equals("")) setCompoundDrawables(null, null, icon, null);
else super.setError(error, icon);
}
Все остальное остается неизменным:
Используйте setError(null)
, чтобы не получить ни значок, ни всплывающее сообщение.
Используйте setError(errorMessage)
, где errorMessage
- это строка с длиной по крайней мере 1, чтобы получить значок и всплывающее сообщение.
Ответ 6
Это очень полезно, когда вы хотите отображать сообщения об ошибках для поля edittext, когда пользователь вводит неверную информацию. Это очень просто программа, вы должны использовать метод serError() в редакторе.
Шаг 1:
Создать кнопку и реализовать onclickListener.
btnLogin.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
Шаг 2:
Проверьте поля ввода и установите ошибку в поле ввода.
if(edName.length()>3){
if(edNumber.length()>3){
Toast.makeText(getApplicationContext(), "Login success", Toast.LENGTH_SHORT).show();
}else{
edNumber.setError("Number Mininum length is 4");
}
}else{
edName.setError("Name Mininum length is 4");
}
Подробнее см. эту ссылку: http://velmuruganandroidcoding.blogspot.in/2014/08/set-error-message-in-edittext-android.html