在editText android中写入文本时激活按钮

时间:2012-10-30 11:47:22

标签: android android-layout

我有一个布局,我有一些edittexts和一个按钮。此按钮是setEnabled(false)。当用户在edittext中写一些文本时,如何更改其状态?我想当用户把一些文本编辑成文本按钮setEnabled on true?

4 个答案:

答案 0 :(得分:6)

您需要使用TextWatcher

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

                // TODO Auto-generated method stub
            }

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

答案 1 :(得分:2)

最好也通知用户为什么禁用Button。

使用TextWatcher禁用/启用按钮,并为EditText设置错误提示:

mEditText.addTextChangedListener(new EmptyValidator());

private class EmptyValidator implements 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) {
        }

        @Override
        public void afterTextChanged(Editable editable) {
            if (editable.length() == 0) {
                mEditText.setError("Required");
                mButton.setEnabled(false);
            } else {
                mEditText.setError(null);
                mButton.setEnabled(true);
            }
        }

    }

答案 2 :(得分:1)

关于您的代码和要求,以下代码应该可以正常工作:

mEditText.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}

    @Override
    public void afterTextChanged(Editable string) {
        if(string.length() > 0) {
            mButton.setEnabled(true);
        } else {
            mButton.setEnabled(false);
        }
    }
});

答案 3 :(得分:1)

您需要查看edittext的当前长度以及从TextWatcher获得的长度 如果您的EditText的最小长度为1(1)或不为null,则为setEnabled(true);否则默认为false。

检查条件:

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

                // TODO Auto-generated method stub
            }

            @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
           if(edt.getText().toString().length()<=0)
              { 
           edt.setError("Required.");
           btn.setEnable(true);
               } 

       else
         {
       btn.setEnable(true); 
         }


            }
        });