如果EditText为空,如何禁用Button?

时间:2014-03-27 06:42:11

标签: android button

我的应用程序中有一个EditText和一个Button。

单击该按钮时,EditText中输入的文本将添加到ListView。

如果EditText为空,我想禁用Button。如何做?

这是我点击按钮的代码

ImageButton imb=(ImageButton)findViewById(R.id.btn_send);
            imb.setOnClickListener(new OnClickListener()
            {
             @Override
             public void onClick(View arg0) 
             { 
                 EditText et = (EditText)findViewById(R.id.EditText1);

                  String str = et.getText().toString();
                  web1.add(str);
                  Toast.makeText(ShoutSingleProgram.this, "You entered...."+str, Toast.LENGTH_SHORT).show();
                  adapter1.notifyDataSetChanged();
                  et.setText("");

                    }
            });
            }

我该怎么做?

14 个答案:

答案 0 :(得分:36)

    editText1.addTextChangedListener(new TextWatcher() {

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

           if(s.toString().trim().length()==0){
                button.setEnabled(false);
              } else {
                button.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

        }
    });

答案 1 :(得分:8)

使用TextChangedListener并最初在onCreate()中禁用ImageButton

试试这个

public class MyActivity extends Activity {

ImageButton imb;
EditText et;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imb = (ImageButton) findViewById(R.id.btn_send);
    et = (EditText) findViewById(R.id.EditText1);

    imb.setEnabled(false); // set button disable initially

    et.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub

            if (s.toString().equals("")) {
                imb.setEnabled(false);
            } else {
                imb.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

        }
    });

}

}

答案 2 :(得分:5)

简单只需检查onCreate中的条件

if (et.getText().toString().trim().equals("")){
  button.setEnabled(false);
}
else{
button.setEnabled(true);
}

答案 3 :(得分:1)

将TextWatcher添加到EditText中,这样当您更改其中的文本时,Button会启用或禁用自身。

答案 4 :(得分:1)

最初在onCreate()禁用按钮。 然后在编辑文本中添加addTextChangedListener。在其中检查edittext长度并禁用它是否为0或以其他方式启用它

答案 5 :(得分:1)

我使用TextUtils来提供简洁的解决方案:

    editText.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            button.setEnabled(!TextUtils.isEmpty(s.toString().trim()));
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

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

答案 6 :(得分:1)

简易解决方案

这在Data-Binding中非常容易实现。希望您此时已意识到这一点。您只能通过XML使用EditText管理Button。

android:enabled="@{etName.text.length() > 0 && etPassword.text.length() > 5}"

相当于

button.setEnabled(etName.getText().length() > 0 && etPassword.getText().length() > 5 );
  • &HTML entity,表示 & 。可以有&。

  • 之类的任何运算符
  • etNameetPassword是EditTexts ID。

完整的XML-

<LinearLayout
    >

    <EditText
        android:id="@+id/etName"
        />

    <EditText
        android:id="@+id/etPassword"
        />

    <Button
        android:enabled="@{etName.text.length() > 5 &amp;&amp; etPassword.text.length() > 5}"
        />

</LinearLayout>

答案 7 :(得分:0)

on Oncreate(),在按钮点击之前,你应该检查条件为,

   ImageButton imb=(ImageButton)findViewById(R.id.btn_send);
   EditText et = (EditText)findViewById(R.id.EditText1);
   if(et.getText().toString().equals("")
   {
   imb.setEnabled(false);
   }

   imb.setOnClickListener(new OnClickListener()
        {
         @Override
         public void onClick(View arg0) 
         { 
             EditText et = (EditText)findViewById(R.id.EditText1);

              String str = et.getText().toString();
              web1.add(str);
              Toast.makeText(ShoutSingleProgram.this, "You entered...."+str, Toast.LENGTH_SHORT).show();
              adapter1.notifyDataSetChanged();
              et.setText("");

                }
        });

答案 8 :(得分:0)

如果要禁用editText,您将使用以下代码

editText.setEnabled(false); 
editText.setFocusable(false);

答案 9 :(得分:0)

使用文本观察器在运行时检查edittext的状态。 以下代码计算文本长度,如果长度为零,则禁用。 使用此代码:

EditText mEditText = new EditText(this);
    mEditText.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before,
                int count) {
            // TODO Auto-generated method stub
            if (s.length() == 0) {
                button.setEnabled(false);
            }
                            else {
                            button.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

        }
    });

答案 10 :(得分:0)

如果您想使用面向对象的解决方案并重用代码

public abstract class EmptyTextWatcher implements TextWatcher
{
    public abstract void onEmptyField();

    public abstract void onFilledField();

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count)
    {
        if (s.toString().trim().length() == 0)
        {
            onEmptyField();
        } else
        {
            onFilledField();
        }
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after)
    {

    }



    @Override
    public void afterTextChanged(Editable s)
    {

    }

}

所以你可以只使用

textView.addTextChangedListener(new EmptyTextWatcher()
        {

            @Override
            public void onEmptyField()
            {
                button.setEnabled(false);
            }

            @Override
            public void onFilledField()
            {
                button.setEnabled(true);
            }
        });

答案 11 :(得分:0)

如果有人在想这里是代码的kotlin版本

editText1.addTextChangedListener(object: TextWatcher {
        override fun onTextChanged(s:CharSequence, start:Int, before:Int, count:Int) {
            if (s.toString().trim({ it <= ' ' }).isEmpty())
            {
                button.setEnabled(false)
            }
            else
            {
                button.setEnabled(true)
            }
        }
        override fun beforeTextChanged(s:CharSequence, start:Int, count:Int,
                              after:Int) {
            // TODO Auto-generated method stub
        }
        override fun afterTextChanged(s: Editable) {
            // TODO Auto-generated method stub
        }
    })

答案 12 :(得分:0)

这是科特林的一个非常简单的答案。

只需用您自己的替换'EditText'和'Button'。

Button.isEnabled = false
        EditText.addTextChangedListener(object: TextWatcher {
            override fun onTextChanged(s:CharSequence, start:Int, before:Int, count:Int) {
                Button.isEnabled = s.toString().trim{ it <= ' ' }.isNotEmpty()
            }
            override fun beforeTextChanged(s:CharSequence, start:Int, count:Int,
                                           after:Int) {
            }
            override fun afterTextChanged(s: Editable) {
            }
        })

使用多个EditText

Button.isEnabled = false
            val editTexts = listOf(editText1, editText2, editText3, editText4, editText5, editText6)
for (editText in editTexts) {
            editText.addTextChangedListener(object : TextWatcher {
            override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
                var et1 = editText1.text.toString().trim()
                var et2 = editText2.text.toString().trim()
                var et3 = editText3.text.toString().trim()
                var et4 = editText4.text.toString().trim()
                var et5 = editText5.text.toString().trim()
                var et6 = editText6.text.toString().trim()

                computeBtn.isEnabled = et1.isNotEmpty()
                        && et2.isNotEmpty()
                        && et3.isNotEmpty()
                        && et4.isNotEmpty()
                        && et5.isNotEmpty()
                        && et6.isNotEmpty()
            }

            override fun beforeTextChanged(
                s: CharSequence, start: Int, count: Int, after: Int) {
            }

            override fun afterTextChanged(
                s: Editable) {
            }
        })
        }

答案 13 :(得分:0)

与最常见的答案相同,但简化了。请记住将条件包装在 feature = vision_v1.types.Feature( type_=vision_v1.types.Feature.Type.DOCUMENT_TEXT_DETECTION) 中,以便它使用布尔值。

()