Подтвердить что ты не робот

Включить и отключить кнопку в соответствии с текстом в EditText на Android

Я хочу отключить Button, если слова в EditText меньше трех слов, и если слова в EditText содержат более трех слов, я хочу включить его, чтобы он мог получить щелчок.

Может ли кто-нибудь помочь мне здесь?

4b9b3361

Ответ 1

Вы должны addTextChangedListener на EditText

Вот так:

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

Надеюсь, что это поможет.

Ответ 2

Проблема с использованием 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
}  

Ответ 3

Вы можете делать то, что говорит @Udaykiran, но вместо этого используйте arg0.length().

Editable также содержит длину содержимого TextEditor, которое было изменено

Ответ 4

Самое простое решение

Это очень просто в привязке данных. Вы можете напрямую обрабатывать состояние кнопки в XML в зависимости от EditText.

android:enabled="@{etName.text.length() > 5 && etPassword.text.length() > 5}"
  • Здесь & HTML-сущность, которая обозначает &.

  • Здесь etName & etPassword - соответствующие идентификаторы для имени и пароля EditText.

Образец 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>