📜  如何在Android中实现TextWatcher?

📅  最后修改于: 2021-05-09 16:38:39             🧑  作者: Mango

如果有一个包含要由用户填写的登录表单的应用程序,则应该禁用登录按钮(这意味着:该按钮不可单击)。当用户输入表单的凭据时,应启用该按钮以单击该用户。因此,在本文中,我们将对EditText字段实现TextWatcher。请看以下图片,以了解什么是TextWatcher,以及如何提高用户交互性。注意,我们将使用Java语言实现该项目。

Android中的TextWatcher

在Android中实现TextWatcher的步骤

步骤1:创建一个空活动项目

  • 创建一个空的活动Android Studio项目。参考Android |如何在Android Studio中创建/启动新项目?
  • 请注意,选择Java作为编程语言。

步骤2:使用activity_main.xml

  • 实现两个编辑文本字段,一个用于电子邮件,一个用于密码。
  • 在activity_main.xml文件中调用以下代码。
XML


  
    
    
  
    
    
  
    
    


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中的TextWatcher

步骤3:使用MainAcitvity。 Java文件

  • 我们还可以分别处理两个EditText。但是在这种情况下,为了减少代码行,实现了回调侦听器TextWatcher,并将回调侦听器对象传递给每个编辑文本的addTextChangedListener方法。
  • MainActivity中调用以下代码添加了Java文件注释,以更好地理解。

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的基础知识吗?
单击此处,前往由我们的专家精心策划的指南,以使您立即做好行业准备!