根据Android中EditText中的文本启用和禁用Button

时间:2011-11-22 10:23:49

标签: android button android-edittext

如果EditText中的单词少于3个单词,我想按Button禁用,如果EditText中的单词超过3个单词,那么我想启用它以便它可以被点击。

有人可以帮我吗?

4 个答案:

答案 0 :(得分:33)

您必须addTextChangedListenerEditText

像这样:

yourEditText.addTextChangedListener(new TextWatcher() {
      @Override
      public void afterTextChanged(Editable arg0) {
         enableSubmitIfReady();
      }

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

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

在那种方法中,你应该这样做:

 public void enableSubmitIfReady() {

    boolean isReady = yourEditText.getText().toString().length() > 3;    
    yourbutton.setEnabled(isReady);
  }

希望它有所帮助。

答案 1 :(得分:1)

单独使用afterTextChanged的问题是在应用程序启动时,在您开始键入EditText之前,它无法最初禁用该按钮。

这就是我实施我的方式而且效果很好。在Activity的onCreate方法

中调用此方法
void watcher(final EditText message_body,final Button Send)
{
    final TextView txt = (TextView) findViewById(R.id.txtCounter);
    message_body.addTextChangedListener(new TextWatcher()
    {
        public void afterTextChanged(Editable s) 
        { 
            txt.setText(message_body.length() + " / 160"); //This is my textwatcher to update character left in my EditText
            if(message_body.length() == 0)
                Send.setEnabled(false); //disable send button if no text entered 
            else
                Send.setEnabled(true);  //otherwise enable

        }
        public void beforeTextChanged(CharSequence s, int start, int count, int after){
        }
        public void onTextChanged(CharSequence s, int start, int before, int count){
        }
    }); 
    if(message_body.length() == 0) Send.setEnabled(false);//disable at app start
}  

答案 2 :(得分:1)

您可以执行@Udaykiran所说的内容,但请改用arg0.length()

Editable还包含已更改的TextEditor内容的长度

答案 3 :(得分:0)

最简单的解决方案

这在Data-Binding中非常容易。您可以根据EditText直接处理XML中的按钮状态。

android:enabled="@{etName.text.length() > 5 && etPassword.text.length() > 5}"
  • &HTML entity,表示 &

  • etNameetPassword是名称和密码EditText的对应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>