EditText setError()带有图标但没有弹出消息

Raj*_*ran 31 android android-edittext

我想对我的EditText进行一些验证,其中我要显示"在此输入图像描述"图标(当您放置editText.setError("blah blah"))但不希望弹出窗口中的文本显示"blah blah"时出现).

有什么办法吗?一种方法是创建一个自定义布局,它将在EditText中显示图像图标.但有更好的解决方案吗?

Raj*_*ran 39

经过大量研究和排列后问题得到解决 - (也感谢@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);
}
}
Run Code Online (Sandbox Code Playgroud)

将此类用作xml中的视图,如下所示 -

<com.raj.poc.MyEditText
    android:id="@+id/et_test"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)

现在,在第三步中,只需将a设置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);
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

其中R.drawable.ic_error=

保持文本null可以解决问题但是如果我们在setError(null)中只保留null,则不会显示验证错误; 它应该与第二个参数一起为null.

  • 这样,文本更改时图标不会消失. (2认同)

小智 12

您不需要创建新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);

            }
Run Code Online (Sandbox Code Playgroud)

  • `editText.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.error,0);`也有效,而且更短. (3认同)