2013-02-21 13 views
6

Jeśli EditText jest pusty, należy zalogować się na Button. A jeśli EditText ma jakieś teksty, to należy włączyć Login Button. Cóż, możesz zobaczyć tę metodę na Instagram Login.W Androidzie, jak wyłączyć przycisk logowania w odniesieniu do EditText?

Oba pola są puste, Logowanie Button jest WYŁĄCZONE.

enter image description here

Oto hasło pole jest puste, więc nadal Zaloguj się Button jest wyłączone.

enter image description here

Tutaj oba pola Nazwa użytkownika i hasło nie jest pusta, więc Zaloguj się Button jest włączony.

enter image description here

jak osiągnąć kroki ?? tutaj jest mój kod i nie działa ..

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

spróbuj poszukać na textutils: http://developer.android.com/reference/android/text/TextUtils.html - ma funkcję "isEmpty", która może być przydatna tutaj. – Evilunclebill

+0

spróbuj tego, jeśli (s1.length() == 0 || s2.length() == 0)? –

+0

sprawdź moją odpowiedź, jeśli to działa. – moDev

Odpowiedz

19

herezje czego szukasz:

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

To działa :)) Dziękuję !! – DroidLearner

+0

+1 dla Ciebie petey !! To działało również dla mnie. Dzięki. – VikramV

+0

słaba odpowiedź, bez pomocy –

4

Trzeba wdrożyć TextWatcher na EditText do osiągnięcia rezultatu.

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

Trzeba śledzić działania użytkownika wewnątrz EditText użyciu TextWatcher obiektu:

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

spróbować

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

Należy użyć TextWatcher. To wywoła metodę po wpisaniu użytkownika. Możesz sprawdzić długość i inne elementy edytowanego tekstu.

+0

Ya, mam cię !! Dzięki – DroidLearner

2

spróbuj tego:

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

Dziękuję Santosh! – DroidLearner

2

Musisz dołączyć TextWatcher która jest wywoływana gdy tekst w jednym z pól EditText ulega zmianie.

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

Chcę tylko dodać, że kontrola będzie NIE praca jeśli InputType z EditText jest hasło (lub podobny) i fuction dowodu długość tekstu (zobacz inne odpowiedzi) nazywa z

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

Dlatego ważne jest, aby połączyć się z czeku z

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

hej jeśli chcesz używać kodu c ut przycisk musi zmienić kolor, jeśli editText1_id i editText1_passcode jest w 4 cyfr

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 

    } 
}; 

}