持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
我们前面给大家介绍了 EditText 的焦点变更监听器,那么今天来给大家介绍的是 文本变化监听器,addTextChangedListener。
现在主流 app 在用户登录的时候都做了简化,以便于让用户更加简单便捷的登录账户。比如我们的掘金app在用手机号登录的时候,界面非常简单,只需要输入手机号,点击按钮获取验证码。其中获取验证码的按钮处于禁用状态,当手机号到达标准位数的时候,获取验证码的按钮会变更为可用状态。
那么这个时候就可以用我们今天要介绍的 addTextChangedListener 监听器对输入手机号的 编辑框进行监听,当手机号位数到达11位的时候,改变获取验证码按钮改为可用,否则为不可用。
OK,下面让我们来实现一下这个页面
登录页面
首先我们分析一下这个页面结构:
- 掘金Logo以及文本内容(我这里偷个懒直接用图片代替) ImageView
- 电话选择下拉框(我这里直接用 Textview 代替) TextView
- 手机号码编辑框 EditText
- 获取验证码按钮 Button
- 同意协议 CheckBox
接着我们来构建这个页面:
我这里用的相对布局 RelativeLayout ,里面的结构如我们上面分析的页面结构一样,需要注意的是获取验证码按钮需要设置两个 shapeDrawable 文件,一个用于禁用的状态样式,一个用于非禁用的状态样式(初始状态设置为禁用)。
最后让我们来给 EditText 添加文本变化监听器,在文本发生变化的时候检测手机号位数是否到达11位,如果到11位就把获取验证码按钮设置为非禁用状态。
addTextChangedListener 监听器 有三个方法:
- beforeTextChanged,在文本改变之前触发
- onTextChanged,在文本改变过程中触发
- 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位时做了个键盘收回的事件。
到此为止我们就完成了监听 手机号编辑框文本变化监听的功能,那么这个监听器其实使用起来相对不复杂,大家可以多动手试试。