如果有一个包含要由用户填写的登录表单的应用程序,则应该禁用登录按钮(这意味着:该按钮不可单击)。当用户输入表单的凭据时,应启用该按钮以单击该用户。因此,在本文中,我们将对EditText字段实现TextWatcher。请看以下图片,以了解什么是TextWatcher,以及如何提高用户交互性。注意,我们将使用Java语言实现该项目。
在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);
}
}
输出界面:
步骤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的基础知识吗?
单击此处,前往由我们的专家精心策划的指南,以使您立即做好行业准备!