In Android, how to make Login button disable with respect to EditText?

前端 未结 9 2178
猫巷女王i
猫巷女王i 2020-12-28 09:50

If EditText is empty then Login Button has to be disabled. And if EditText has some texts then Login Button has to be ena

相关标签:
9条回答
  • 2020-12-28 10:13

    You need to attach a TextWatcher that is called whenever the text in one of the EditText fields is changed.

    private EditText mName;
    private EditText mPassword;
    private Button mButton;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        setContentView(R.layout.activity_login_check);
        mName = (EditText) findViewById(R.id.editText1);
        mPassword = (EditText) findViewById(R.id.editText2);
        mButton = (Button) findViewById(R.id.button1);
    
        mName.addTextChangedListener(mWatcher);
        mPassword.addTextChangedListener(mWatcher);
    }
    
    private TextWatcher mWatcher = new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
            boolean nameNotEmpty = mName.getText().length()>0;
            boolean pwNotEmpty = mPassword.getText().length()>0;
            mButton.setEnabled(nameNotEmpty && pwNotEmpty);
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {}
    };
    
    0 讨论(0)
  • 2020-12-28 10:14

    try this

      if(s1.equals("") && s2.equals(""))
        {
            b.setEnabled(true);
            // to change color of the button you need to apply style to the button[here refer custom bg][1]
        }
        else
        {
            b.setEnabled(false);
           //do nothing or display toast msg
        }
    
    0 讨论(0)
  • 2020-12-28 10:19

    I only want to add that the check will NOT work if the InputType of the EditText is a password (or similar) and the fuction to proof the length of the text (see other answers) is called from

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {...}
    

    So it is important to call the check from

    @Override 
    public void afterTextChanged(Editable s) {...}
    
    0 讨论(0)
  • 2020-12-28 10:23

    try this:

    EditText et1,et2;
    Button b;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_login_check);
      et1 = (EditText) findViewById(R.id.editText1);
      et2 = (EditText) findViewById(R.id.editText2);
      b = (Button) findViewById(R.id.button1);
    
    
      et1.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                                String s1 = et1.getText().toString();
                                String s2 = et2.getText().toString();
    
                                 if(s1.equals("") && s2.equals("")){
                                       b.setEnabled(false);
                                } 
                                else if(!s1.equals("")&&s2.equals("")){
                                       b.setEnabled(false);
                                }
                                else if(!s2.equals("")&&s1.equals(""){
                                       b.setEnabled(false);
                                }
                                else {
                                b.setEnabled(true);
                              }
    
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
    
            }
        });
      et2.addTextChangedListener(new TextWatcher() {
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
    
                                String s1 = et1.getText().toString();
                                String s2 = et2.getText().toString();
    
                                if(s1.equals("") && s2.equals("")){
                                       b.setEnabled(false);
                                } 
                                else if(!s1.equals("")&&s2.equals("")){
                                       b.setEnabled(false);
                                }
                                else if(!s2.equals("")&&s1.equals(""){
                                       b.setEnabled(false);
                                }
                                else {
                                b.setEnabled(true);
                              }
    
            }
    
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
    
            }
        });
    
    }
    
    0 讨论(0)
  • 2020-12-28 10:26
    private TextWatcher mPhoneNumberEtWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}
    
        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            if (charSequence.length() >= 10) {
                mPhoneImg.setImageDrawable(getResources().getDrawable(R.drawable.phone_activate));
    
                if (mPasswordEt.getText().toString().length() >= 5) {
                    mLoginBtn.setEnabled(true);
                }
    
            } else {
                mPhoneImg.setImageDrawable(getResources().getDrawable(R.drawable.phone));
                mLoginBtn.setEnabled(false);
            }
        }
    
        @Override
        public void afterTextChanged(Editable editable) {
        }
    };
    
    mPhoneNumberEt.addTextChangedListener(mPhoneNumberEtWatcher);
    

    You should use TextWatcher. That will call method after typing of user. And you can check length and somthing else of your edit text.

    0 讨论(0)
  • 2020-12-28 10:27

    You need to implement TextWatcher on EditText to achieve the result.

    EditText et1, et2;
    Button b;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    
        et1 = (EditText) findViewById(R.id.editText1);
        et2 = (EditText) findViewById(R.id.editText2);
        b = (Button) findViewById(R.id.button1);
    
        checkValidation();
    
        et1.addTextChangedListener(mWatcher);
        et2.addTextChangedListener(mWatcher);
    }
    
    private void checkValidation() {
        // TODO Auto-generated method stub
    
        if ((TextUtils.isEmpty(et1.getText()))
                || (TextUtils.isEmpty(et2.getText())))
            b.setEnabled(false);
        else
            b.setEnabled(true);
    
    }
    
    TextWatcher mWatcher = new TextWatcher() {
    
        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub
            checkValidation();
        }
    
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            // TODO Auto-generated method stub
    
        }
    
        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub
    
        }
    };
    
    0 讨论(0)
提交回复
热议问题