posts - 296,comments - 1,views - 2995

一.所花时间

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();
 }
 }

 

posted on   leapss  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
历史上的今天:
2023-05-15 每日打卡-24.2
2023-05-15 每日打卡-24.1
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示