在Android中,如何使登录按钮相对于EditText禁用?

在Android中,如何使登录按钮相对于EditText禁用?,android,button,android-edittext,android-ui,android-button,Android,Button,Android Edittext,Android Ui,Android Button,如果EditText为空,则必须禁用登录按钮。如果EditText有一些文本,则必须启用登录按钮。您可以在Instagram登录中看到此方法 两个字段均为空,登录按钮被禁用 此处密码字段为空,因此仍然禁用登录按钮 此处用户名和密码字段均不为空,因此登录按钮已启用 如何实现这些步骤?? 这是我的代码,它不起作用 EditText et1,et2; @Override protected void onCreate(Bundle savedInstanceState) { super.

如果
EditText
为空,则必须禁用登录
按钮。如果
EditText
有一些文本,则必须启用登录
按钮。您可以在Instagram登录中看到此方法

两个字段均为空,登录
按钮
被禁用

此处密码字段为空,因此仍然禁用登录
按钮

此处用户名和密码字段均不为空,因此登录
按钮
已启用

如何实现这些步骤?? 这是我的代码,它不起作用

EditText et1,et2;
@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);
    Button b = (Button) findViewById(R.id.button1);

    String s1 = et1.getText().toString();
    String s2 = et2.getText().toString();

    if(s1.equals("")|| s2.equals("")){
        b.setEnabled(false);
    } else {
        b.setEnabled(true);
    }
}
您需要在
EditText
上实现,以获得结果

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

    }
};

您需要使用
TextWatcher
对象跟踪用户在
EditText
中的操作:

myEditText.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)
            {

            }

            @Override
            public void afterTextChanged(Editable s)
            {
                if (s.length() > 1)
                {
                    //enable button
                } else
                    //disable
            }
        });
试试这个

  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
    }
你应该使用TextWatcher。它将在键入用户后调用方法。您可以检查编辑文本的长度和其他内容。

试试以下方法:

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

        }
    });

}

以下是您正在寻找的内容:

private EditText et1,et2;
//  create a textWatcher member
private TextWatcher mTextWatcher = new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
    }

    @Override
    public void afterTextChanged(Editable editable) {
        // check Fields For Empty Values
        checkFieldsForEmptyValues();
    }
};

void checkFieldsForEmptyValues(){
    Button b = (Button) findViewById(R.id.button1);

    String s1 = et1.getText().toString();
    String s2 = et2.getText().toString();

    if(s1.equals("")|| s2.equals("")){
        b.setEnabled(false);
    } else {
        b.setEnabled(true);
    }
}

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


    // set listeners
    et1.addTextChangedListener(mTextWatcher);
    et2.addTextChangedListener(mTextWatcher);

    // run once to disable if empty
    checkFieldsForEmptyValues(); 
}

您需要附加一个TextWatcher,每当其中一个EditText字段中的文本发生更改时,就会调用该TextWatcher

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

我只想补充一点,如果
EditText
InputType
是一个密码(或类似密码),并且从中调用了验证文本长度的功能(参见其他答案),则检查将无效

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {...}
因此,重要的是,从

@Override 
public void afterTextChanged(Editable s) {...}

嘿,如果要使用代码剪切,如果editText1_id和editText1_密码是4位数字,则按钮需要更改颜色

checkValidation();

    editText1_id.addTextChangedListener(mWatcher);
    editText1_passcode.addTextChangedListener(mWatcher);
}

private void checkValidation() {
    // TODO Auto-generated method stub

    if ((TextUtils.isEmpty(editText1_id.getText()))
            || (TextUtils.isEmpty(editText1_passcode.getText())))
        loginbtn.setEnabled(false);
    else
        loginbtn.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

    }
};

}

尝试查看TextUtils:-它有一个功能“isEmpty”,在这里可能很方便。如果(s1.length()==0 | | s2.length()==0),您是否尝试过此功能?检查我的答案是否对您有效。@Tamilarasivaraj是的,我尝试过。。看看我接受的答案。它的工作原理:DHi你能用颜色代码或只是颜色代码更新Button Style.XML吗。。。。我喜欢你的按钮样式和颜色代码…+1适合你,皮特!!这对我也很管用。谢谢你,朋友。也许你有不同的问题。谢谢你莫名其妙的否决票。
checkValidation();

    editText1_id.addTextChangedListener(mWatcher);
    editText1_passcode.addTextChangedListener(mWatcher);
}

private void checkValidation() {
    // TODO Auto-generated method stub

    if ((TextUtils.isEmpty(editText1_id.getText()))
            || (TextUtils.isEmpty(editText1_passcode.getText())))
        loginbtn.setEnabled(false);
    else
        loginbtn.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

    }
};

}