2013-02-21 69 views
6

如果EditText爲空,則必須禁用登錄Button。如果EditText有一些文字,則必須啓用登錄Button。那麼你可以在Instagram上看到這種方法。在Android中,如何針對EditText使Login按鈕禁用?

這兩個字段都是空的,請登錄Button已被禁用。

enter image description here

這裏密碼字段爲空,所以還是請登錄Button被禁用。

enter image description here

這裏既有用戶名和密碼字段不爲空,所以登錄Button被啓用。

enter image description here

如何實現這些步驟? 這裏是我的代碼,它不工作..

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); 
    } 
} 
+1

嘗試尋找在文本實用程序:http://developer.android.com/reference/android/text/TextUtils.html - 它有一個「isEmpty」功能,可能在這裏很方便。 – Evilunclebill 2013-02-21 13:08:07

+0

你試過這個if(s1.length()== 0 || s2.length()== 0)? – 2013-02-21 13:08:28

+0

檢查我的答案,如果它適合你。 – moDev 2013-02-21 13:48:35

回答

19

繼承人你在找什麼:

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(); 
} 
+1

它工作:))謝謝! – DroidLearner 2013-02-21 15:57:45

+0

+1爲你petey!它也適用於我。謝謝。 – VikramV 2013-12-25 18:46:19

+0

可憐的回答,沒幫助 – 2017-12-19 16:00:28

4

您需要在EditText實施TextWatcher達到的效果。

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 

    } 
}; 
2

你需要使用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 
      } 
     }); 
0

試試這個

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 
    } 
1
private TextWatcher mPhoneNumberEtWatcher = new 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) { 
     if (charSequence.length() >= 10) { 
      mPhoneImg.setImageDrawable(getResources().getDrawable(R.drawable.phone_activate)); 

      if (mPasswordEt.getText().toString().length() >= 5) { 
       mLoginBtn.setEnabled(true); 
      } 

     } else { 
      mPhoneImg.setImageDrawable(getResources().getDrawable(R.drawable.phone)); 
      mLoginBtn.setEnabled(false); 
     } 
    } 

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

mPhoneNumberEt.addTextChangedListener(mPhoneNumberEtWatcher); 

您應該使用TextWatcher。這會在用戶輸入後調用方法。而且您可以檢查編輯文本的長度和其他內容。

+0

雅我得到你了!謝謝 – DroidLearner 2013-02-21 15:59:44

2

試試這個:

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 

     } 
    }); 

} 
+0

謝謝桑托斯! – DroidLearner 2013-02-21 15:59:19

2

您需要附上每當在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) {} 
}; 
0

我只想補充一點,檢查將工作如果EditTextInputType是一個密碼(或類似)和機能的研究,以證明文本(見其他答案)的長度被稱爲從

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

所以從

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

調用檢查嘿它是重要的,如果要使用的代碼C UT斯達康按鈕需要改變顏色,如果editText1_id和editText1_passcode是在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 

    } 
}; 

}