求助:基于AlertDialog.Builder实现邮箱验证器的MainActivity代码编写
嘿,我来帮你搞定这个邮箱验证器的实现!咱们一步步来,先理清楚需求,然后把代码拆成几块,你跟着抄就行~
实现邮箱验证器的完整步骤
1. 先准备布局文件(activity_main.xml)
首先得有输入邮箱的输入框、显示保存结果的文本框,还有触发验证的按钮,给你写个基础布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" android:gap="16dp"> <EditText android:id="@+id/et_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Enter your email" android:inputType="textEmailAddress"/> <Button android:id="@+id/btn_validate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Validate Email"/> <TextView android:id="@+id/tv_saved_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="16sp"/> </LinearLayout>
2. MainActivity中的核心逻辑
下面是Java版本的核心代码(如果需要Kotlin版本可以告诉我),主要完成控件绑定、邮箱格式验证、弹窗逻辑这三件事:
import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import java.util.regex.Pattern; public class MainActivity extends AppCompatActivity { private EditText etEmail; private TextView tvSavedEmail; // 通用邮箱正则,覆盖绝大多数常见格式 private static final Pattern EMAIL_PATTERN = Pattern.compile( "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$" ); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化界面控件 etEmail = findViewById(R.id.et_email); tvSavedEmail = findViewById(R.id.tv_saved_email); Button btnValidate = findViewById(R.id.btn_validate); // 给验证按钮绑定点击事件 btnValidate.setOnClickListener(v -> validateEmail()); } private void validateEmail() { String inputEmail = etEmail.getText().toString().trim(); // 先处理空输入的情况(可选,你可以根据需求调整) if (inputEmail.isEmpty()) { new AlertDialog.Builder(this) .setTitle("提示") .setMessage("请输入邮箱地址") .setPositiveButton("OK", (dialog, which) -> dialog.dismiss()) .show(); return; } // 验证邮箱格式是否合法 boolean isEmailValid = EMAIL_PATTERN.matcher(inputEmail).matches(); if (isEmailValid) { // 格式正确的弹窗:仅显示提示和OK按钮 new AlertDialog.Builder(this) .setTitle("验证成功") .setMessage("Email address is Correct") .setPositiveButton("OK", (dialog, which) -> { dialog.dismiss(); // 本来就在主界面,点击OK关闭弹窗即可;如果是从其他页面跳转来的,这里可以加finish()返回 }) .setCancelable(false) // 必须点击按钮才能关闭弹窗 .show(); } else { // 格式错误的弹窗:带Save和Clear按钮 new AlertDialog.Builder(this) .setTitle("验证失败") .setMessage("Email address is incorrect") .setPositiveButton("Save", (dialog, which) -> { // 把输入的邮箱保存到TextView tvSavedEmail.setText("Saved Email: " + inputEmail); dialog.dismiss(); }) .setNegativeButton("Clear", (dialog, which) -> { // 清空输入框和保存的文本 etEmail.setText(""); tvSavedEmail.setText(""); dialog.dismiss(); }) .setCancelable(false) .show(); } } }
3. 关键细节提示
- 正则表达式:我用的是通用版,如果需要支持更特殊的域名格式,可以自行调整正则规则;
- Java版本兼容:如果你的项目用的是Java 8以下,需要把lambda表达式改成匿名内部类的写法(比如
setPositiveButton的点击事件); - 返回主界面:因为验证成功的弹窗本身就在主界面,所以点击OK只需要关闭弹窗即可,不需要额外的返回逻辑。
内容的提问来源于stack exchange,提问作者Matheo
相关产品推荐
相关产品推荐

