Как реализовать TextWatcher в Android?

Опубликовано: 1 Декабря, 2021

Если есть приложение, содержащее форму входа, которую должен заполнить пользователь, кнопка входа должна быть отключена (что означает: она не должна быть интерактивной). Когда пользователь вводит учетные данные формы, кнопка должна быть включена для нажатия для пользователя. Итак, в этой статье мы реализуем TextWatcher в поле EditText. Взгляните на следующее изображение, чтобы понять, что такое TextWatcher и как это может повысить интерактивность пользователя. Обратите внимание, что мы собираемся реализовать этот проект на языке Java.

Шаги по реализации TextWatcher в Android

Шаг 1. Создайте проект пустого действия

  • Создайте пустой проект Android Studio Activity. Обратитесь к Android | Как создать / запустить новый проект в Android Studio?
  • Обратите внимание, что выберите Java в качестве языка программирования.

Шаг 2. Работа с activity_main.xml

  • Реализуйте два текстовых поля редактирования, одно для электронной почты и одно для пароля.
  • Вызовите следующий код внутри файла activity_main.xml.

XML

<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity"
tools:ignore = "HardcodedText" >
<!--this is the email edittext field-->
< EditText
android:id = "@+id/etEmail"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_marginStart = "16dp"
android:layout_marginTop = "64dp"
android:layout_marginEnd = "16dp"
android:hint = "Email"
android:inputType = "textEmailAddress" />
<!--this is the email password field-->
< EditText
android:id = "@+id/etPassword"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:layout_below = "@id/etEmail"
android:layout_marginStart = "16dp"
android:layout_marginEnd = "16dp"
android:hint = "Password"
android:inputType = "textPassword" />
<!--login button which set to be false for the enabled attribute-->
< Button
android:id = "@+id/loginButton"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_below = "@id/etPassword"
android:layout_centerHorizontal = "true"
android:layout_marginTop = "16dp"
android:enabled = "false"
android:text = "LOGIN" />
</ RelativeLayout >

Выходной интерфейс:

Шаг 3. Работа с файлом MainAcitvity.java

  • Мы также можем обрабатывать оба EditTexts по отдельности. Но в этом случае, чтобы уменьшить количество строк кода, реализуется прослушиватель обратного вызова TextWatcher, и объект прослушивателя обратного вызова передается методу addTextChangedListener для каждого редактируемого текста.
  • Вызов следующего кода внутри файла MainActivity.java, комментарии добавлены для лучшего понимания.

Ява

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
// two edit text fields
EditText etEmail, etPassword;
// one login button
Button bLogin;
// implement the TextWatcher callback listener
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// get the content of both the edit text
String emailInput = etEmail.getText().toString();
String passwordInput = etPassword.getText().toString();
// check whether both the fields are empty or not
bLogin.setEnabled(!emailInput.isEmpty() && !passwordInput.isEmpty());
}
@Override
public void afterTextChanged(Editable s) {
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// register all the UI elements
// with their appropriate IDs
etEmail = findViewById(R.id.etEmail);
etPassword = findViewById(R.id.etPassword);
bLogin = findViewById(R.id.loginButton);
// set the TextChange Listener for both
// the edit text fields
etEmail.addTextChangedListener(textWatcher);
etPassword.addTextChangedListener(textWatcher);
}
}

Выход: запустить на эмуляторе

Хотите более динамичную и конкурентную среду для изучения основ Android?
Щелкните здесь, чтобы перейти к уникальному руководству, составленному нашими экспертами с целью мгновенно подготовить вашу отрасль!