EditText setError () со значком, но без всплывающего сообщения - PullRequest
29 голосов
/ 24 января 2012

Я хочу иметь некоторую проверку для моего EditText, в котором я хочу показать значок "enter image description here" (который появляется, когда вы вводите editText.setError("blah blah")), но не хотите, чтобы текст во всплывающем окне отображалсячто "бла-бла".

Есть ли способ сделать это? Одним из способов является создание пользовательского макета, который будет отображать значок изображения в EditText. Но есть ли лучшее решение?

Ответы [ 7 ]

37 голосов
/ 06 февраля 2012

Проблема решена после большого количества исследований и перестановок - (также благодаря @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 =

12 голосов
/ 05 сентября 2014

Вам не нужно создавать новый класс 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);

            }
4 голосов
/ 04 марта 2013

Извините, Раджкиран, но ваше решение не работает на версии Android 4.2.Если я пытаюсь установить значение null для ошибки, оно даже не отображается.Решение, которое я нашел, состояло в том, чтобы расширить EditText и переопределить setError метод.Нет, у меня есть только индикатор ошибки без всплывающего окна.

@Override
public void setError(CharSequence pError, Drawable pIcon) {
    setCompoundDrawables(null, null, pIcon, null);
}
1 голос
/ 02 сентября 2013

Я имел дело с той же проблемой.Я хотел использовать .setError() для моего EditText, когда пользователь вводит нулевой ввод.Но я думаю, что всплывающее сообщение раздражает, особенно когда у вас больше EditText с.Мое решение было наивным и простым, но оно работало на всех устройствах, которые я пробовал до сих пор.

Я создал свой собственный класс 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.

0 голосов
/ 04 апреля 2018

Просто сделайте следующее >>

editText.requestFocus();
editText.setError( "your error message" );

работал на меня.

0 голосов
/ 21 июня 2017

Чтобы получить только значок ошибки без всплывающего сообщения об ошибке , только когда 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, чтобы получить значок и всплывающее сообщение.

0 голосов
/ 05 сентября 2014

Это очень полезно, когда вы хотите показывать сообщения об ошибках для поля edittext, когда пользователь вводит неверную информацию. Это очень простая программа, только вы должны использовать метод serError () в edittext.

Шаг 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

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