You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何使用TextWatcher控制验证按钮可用性并校验输入内容

双EditText输入校验+按钮状态联动实现方案

核心逻辑说明

你原有代码的问题在于仅监听了单个输入框、只做了非空判断,没有同时校验姓名和邮箱两个输入的合规性,也没有实现邮箱格式校验。以下是完整实现方案:

1. 先定义校验规则方法

// 校验firstname规则:不为空、不能全是空格
private fun isFirstNameValid(name: String): Boolean {
    return name.trim().isNotEmpty()
}

// 校验邮箱规则:符合name@xxx.com格式
private fun isEmailValid(email: String): Boolean {
    // 正则可根据业务需求调整,当前已覆盖常见邮箱格式要求
    val emailPattern = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$"
    return email.trim().matches(emailPattern.toRegex())
}

2. 定义统一的TextWatcher监听器

两个输入框共用同一个监听器,任意一方输入变化时都同时校验两个输入的合规性,再更新按钮状态:

// 初始化时先将按钮设置为禁用状态
button.isEnabled = false

val inputWatcher = object : TextWatcher {
    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}

    override fun afterTextChanged(s: Editable?) {
        // 实时获取两个输入框的内容
        val firstName = etFirstName.text.toString()
        val email = etEmail.text.toString()
        // 只有两个输入都符合规则时才启用按钮
        button.isEnabled = isFirstNameValid(firstName) && isEmailValid(email)
    }
}

3. 给两个输入框都绑定监听器

etFirstName.addTextChangedListener(inputWatcher)
etEmail.addTextChangedListener(inputWatcher)

可选优化

如果需要给firstname增加额外规则(比如长度不超过20位、不能包含特殊字符),直接修改isFirstNameValid方法的判断逻辑即可,不需要改动监听器内部代码。

内容的提问来源于stack exchange,提问作者zou naa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:57:05