android中的onEditorAction

时间:2016-05-06 21:02:41

标签: android android-edittext

我的布局中有两个EditTexts和一个Button

一个名为UserName的EditText和另一个名为Password的按钮,该按钮名为Login

按钮在开始时被禁用

我想要的是,当在EditText UserName和Password中输入任何内容时,Button应该被启用

这是我试过的

@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
    if(!TextUtils.isEmpty(UserName.getText()) && !TextUtils.isEmpty(PassWord.getText()))
    {
        Login.setEnabled(true);
        return true;
    }

    return false;

当我运行此代码时,登录按钮启动为禁用 当我在EditTexts中输入内容时它会保持禁用状态 没有点击Enter按钮

它仅在我单击Enter按钮

时有效

当点击键盘上的任何按钮并且两个EditTexts都不为空时,有没有办法让它工作

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

当文本发生变化时,您可以使用TextChangedListenerEditTexts来监听事件。我的一个项目中有一个代码:

private boolean heightFilled;
private boolean weightFilled;

private void setInputListeners() {
    etHeight.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            heightFilled = s.length() > 0;
            calculateButton.setEnabled(heightFilled && weightFilled);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    etWeight.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            weightFilled = s.length() > 0;
            calculateButton.setEnabled(heightFilled && weightFilled);
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });
}

如果您更改ButtonEditText的名称,这应该有用。

答案 1 :(得分:1)

您需要使用textchanged侦听器。如果两者都有一个输入和呼叫代码,你可以在那里检查输入,并在检查后激活你的按钮。

   editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {
             //enter code here to check if your edittexts have content
             //then do stuff with your button

            }

        }
    });