安卓开发教程27: 文本变化监听器

983 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情

我们前面给大家介绍了 EditText 的焦点变更监听器,那么今天来给大家介绍的是 文本变化监听器,addTextChangedListener。

现在主流 app 在用户登录的时候都做了简化,以便于让用户更加简单便捷的登录账户。比如我们的掘金app在用手机号登录的时候,界面非常简单,只需要输入手机号,点击按钮获取验证码。其中获取验证码的按钮处于禁用状态,当手机号到达标准位数的时候,获取验证码的按钮会变更为可用状态。

image.png

那么这个时候就可以用我们今天要介绍的 addTextChangedListener 监听器对输入手机号的 编辑框进行监听,当手机号位数到达11位的时候,改变获取验证码按钮改为可用,否则为不可用。

OK,下面让我们来实现一下这个页面

登录页面

首先我们分析一下这个页面结构:

  1. 掘金Logo以及文本内容(我这里偷个懒直接用图片代替) ImageView
  2. 电话选择下拉框(我这里直接用 Textview 代替) TextView
  3. 手机号码编辑框 EditText
  4. 获取验证码按钮 Button
  5. 同意协议 CheckBox

接着我们来构建这个页面:

image.png

我这里用的相对布局 RelativeLayout ,里面的结构如我们上面分析的页面结构一样,需要注意的是获取验证码按钮需要设置两个 shapeDrawable 文件,一个用于禁用的状态样式,一个用于非禁用的状态样式(初始状态设置为禁用)。

image.png

最后让我们来给 EditText 添加文本变化监听器,在文本发生变化的时候检测手机号位数是否到达11位,如果到11位就把获取验证码按钮设置为非禁用状态。

addTextChangedListener 监听器 有三个方法:

  1. beforeTextChanged,在文本改变之前触发
  2. onTextChanged,在文本改变过程中触发
  3. afterTextChanged,在文本改变之后触发

利用 addTextChangedListener 监听器,的afterTextChanged 方法 在文本发生变化之后检查手机号位数,做出相应的变化。

protected void onCreate(Bundle savedInstanceState) {
    EditText juejin_phone = findViewById(R.id.juejinphone);
    //给手机号码编辑框添加监听器
    juejin_phone.addTextChangedListener(this);
}

//在文本改变之前触发
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}
//在文本改变过程中触发
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

//在文本改变之后触发
@Override
public void afterTextChanged(Editable editable) {
    if(editable.toString().length() >= 11){
        //按钮设置为可用状态
        juejin_button.setEnabled(true);
        
        //键盘收回
        InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(juejin_phone.getWindowToken(),0);

    }else{
        //按钮设置为禁用状态
        juejin_button.setEnabled(false);

    }


}

这里在手机号到达11位时做了个键盘收回的事件。

image.png

到此为止我们就完成了监听 手机号编辑框文本变化监听的功能,那么这个监听器其实使用起来相对不复杂,大家可以多动手试试。