一.所花时间
0.5h
二.代码量
40行
三.博客量
1篇
四.了解到的知识点
焦点变更监听器
虽然编辑框EditText提供了maxLength属性,用来设置可输入文本的最大长度,但是它没提供对应的
minLength属性,也就无法设置可输入文本的最小长度。譬如手机号码为固定的11位数字,用户必须输满11位才是合法的,然而编辑框不会自动检查手机号码是否达到11位,即使用户少输一位只输入十位数字,编辑框依然认为这是合法的手机号。比如图5-26所示的登录页面,有手机号码编辑框,有密码编辑框,还有登录按钮。
// 从布局文件中获取名为et_password的编辑框
EditText et_password = findViewById(R.id.et_password);
// 给编辑框注册一个焦点变化监听器,一旦焦点发生变化,就触发监听器的onFocusChange方法
et_password.setOnFocusChangeListener(this);
以上代码把焦点变更监听器设置到当前页面,则需让活动页面实现接口
View.OnFocusChangeListener,并重写该接口定义的onFocusChange方法,判断如果是密码框获得焦点,就检查输入的手机号码是否达到11位。具体的焦点变更处理方法如下所示:
// 焦点变更事件的处理方法,hasFocus表示当前控件是否获得焦点。
// 为什么光标进入事件不选onClick?因为要点两下才会触发onClick动作(第一下是切换焦点动作)
@Override
public void onFocusChange(View v, boolean hasFocus) {
// 判断密码编辑框是否获得焦点。hasFocus为true表示获得焦点,为false表示失去焦点
}
if (v.getId()==R.id.et_password && hasFocus) {
String phone = et_phone.getText().toString();
if (TextUtils.isEmpty(phone) || phone.length()<11) { // 手机号码不足11位
// 手机号码编辑框请求焦点,也就是把光标移回手机号码编辑框
et_phone.requestFocus();
Toast.makeText(this, "请输入11位手机号码", Toast.LENGTH_SHORT).show();
}
}
浙公网安备 33010602011771号