Android: EditText Validation with TextWatcher and .setError()

社会主义新天地 提交于 2019-11-28 11:50:33

You should be able to also override the onKeyUp method (http://developer.android.com/reference/android/view/KeyEvent.Callback.html). In there, check to see if the key pressed was KeyEvent.KEYCODE_DEL, then also check to see if the text in the EditText is empty. If it is, throw your error.

It seems that internally TextView has a flag and calls setError(null) if the keyboard sends a key command but the text remains the same. So I subclassed EditText and implemented onKeyPreIme() to swallow the delete key if the text is "". Just use EditTextErrorFixed in your XML files:

package android.widget;

import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.KeyEvent;

public class EditTextErrorFixed extends EditText {
    public EditTextErrorFixed(Context context) {
        super(context);
    }

    public EditTextErrorFixed(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public EditTextErrorFixed(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    /**
     * Don't send delete key so edit text doesn't capture it and close error
     */
    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        if (TextUtils.isEmpty(getText().toString()) && keyCode == KeyEvent.KEYCODE_DEL)
            return true;
        else
            return super.onKeyPreIme(keyCode, event);
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!