EditText setError() with icon but without Popup message

后端 未结 6 1102
你的背包
你的背包 2020-11-27 03:11

I want to to have some validation for my EditText wherein I want to show \"\" icon (that comes when you put editText.setError(\"blah blah\")) but don\'t want th

相关标签:
6条回答
  • 2020-11-27 03:53

    You dont need to create a new EditText class or change xml. The solution is very simple:

    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);
    
                }
    
    0 讨论(0)
  • 2020-11-27 03:55

    To get only the error-icon without an error-message-popup only when setError("") is called (i.e. set an empty String as error-message) I use a custom EditText-class where I override setError(CharSequence, Drawable) like this:

    @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);
    }
    

    Everything else stays the same:

    Use setError(null) to get neither the icon nor the message-popup.

    Use setError(errorMessage), where errorMessage is a String with length 1 at least, to get the icon and message-popup.

    0 讨论(0)
  • 2020-11-27 04:00

    Problem solved after a lot of research and permutations- (Also thanks to @van)

    Create a new class that will extend EditText something like this-

    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);
    }
    }
    

    Use this class as a view in your xml like this-

    <com.raj.poc.MyEditText
        android:id="@+id/et_test"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>
    

    Now in the third step, just set a TextWatcher to your custom text view like this-

        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);
                }
            }
        });
    

    where R.drawable.ic_error =

    Keeping text null solves the problem But if we keep only null in setError(null), this won't show the validation error; it should be null along with second param.

    0 讨论(0)
  • 2020-11-27 04:07

    Sorry Rajkiran, but your solution is not working on Android 4.2 version. If I am trying to set null value for error, it is not even displayed. The solution I came up was to extend EditText and override setError method. No I have only error indicator without popup.

    @Override
    public void setError(CharSequence pError, Drawable pIcon) {
        setCompoundDrawables(null, null, pIcon, null);
    }
    
    0 讨论(0)
  • 2020-11-27 04:10

    I have been dealing with the same problem. I wanted to use .setError() to my EditText when user insert null input. But I think the pop-out message is annoying, especially when you have more EditTexts. My solution was naive and simple, but it worked on all devices I've tried so far.

    I created my own class myEditText and just @Override this method:

        @Override
        public void setError(CharSequence error, Drawable icon) {
           setCompoundDrawables(null, null, icon, null);
        }
    

    then use in layout.xml

        <cz.project.myEditText
         ...
        />
    

    and finally in my code I put onFocusChangeListener to myEditText, so when someone clicks-in, the icon disappears.

        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("");
    

    It works Exactly how I want = no pop-up message when .setError() is called on EditText.

    0 讨论(0)
  • 2020-11-27 04:13

    This is the very useful when you want to show the error messages for the edittext field when the user enter wrong information.this is very simply program only you have to use serError() method in the edittext.

    Step 1: Create button and implement onclickListener.

    btnLogin.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    // TODO Auto-generated method stub
    }
    });
    

    Step 2: Validate the input fields and set the error in the input field.

    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");
    }
    

    Refer this link for more:http://velmuruganandroidcoding.blogspot.in/2014/08/set-error-message-in-edittext-android.html

    0 讨论(0)
提交回复
热议问题