当前位置: 首页 > news >正文

【Android】EditText使用和监听

在这里插入图片描述
三三想成为安卓糕手

一:用户登录校验

1:EditText文本输入框

    <EditTextandroid:id="@+id/et_user_name"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="number"android:maxLines="16"android:hint="请输入用户名" /><EditTextandroid:id="@+id/et_password"android:layout_width="match_parent"android:layout_height="wrap_content"android:inputType="textPassword"android:maxLength="16"android:hint="请输入密码" />

2:hint提示信息

android:hint="请输入用户名" />

hint 提示线索

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3:inputType输入类型

兄弟太吊了 android:inputType="number"

设置用户名的输入类型为number,那么调用出来的键盘如下左图所示(为数字键盘),输入框不接收输入非数字的内容

设置密码的输入类型为textPassword,那么该屏幕界面会被隐藏,并且做了一个加密的处理,还有不能被截图,默认输入法是数字带字母

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入框还可以接收很多种类型

文本,邮件地址,电话,日期时间等等

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4:maxLines位数限制

android:maxLength="16"这玩意好像对用户名位数限制不咋管用啊;对密码到是管用的很

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5:用户名和密码校验

实现效果

左图:用户名和密码正确但是没有勾选协议,点击登录

右图:用户名正确,密码错误,点击登录

这里的情况还有好几种,上述代码基本都能够拦截到

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    //成员变量private EditText etUserName;private EditText etPassword;
initEditText();
//这个方法的调用应该在登录监听器触发之前,主要作用就是完成初始化,避免空指针异常
private void initEditText(){etUserName = findViewById(R.id.et_user_name);etPassword = findViewById(R.id.et_password);}
		/*** 监听登录按钮的状态**/Button loginButton = findViewById(R.id.btn_login);loginButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {boolean checked = cbArgreement.isChecked();if(!checked){Toast.makeText(CheckBoxActivity.this, "请勾选协议", Toast.LENGTH_SHORT).show();}String userName = etUserName.getText().toString().trim();String passWord = etPassword.getText().toString().trim();//点击登录按钮,检测用户名和密码都正确并且勾选了协议,此时才会进行页面跳转。if(userName.equals("admin") && passWord.equals(123456)){//这句代码是在是太ex了兄弟,我完全是蒙蒙的状态啊xd,窝里哇瓦力哇一袋米扛几楼//判断勾选了协议,点击登录按钮,进行页面跳转startActivity(new Intent(CheckBoxActivity.this,SecondActivity.class));}else{//准备弹窗提示Toast.makeText(CheckBoxActivity.this, "用户名与密码不匹配", Toast.LENGTH_SHORT).show();}}});

.trim()方法属于String类中的,可以去除字符串两端的空白字符(包括空格,制表符,换行符等)

二:文本变化监听

0:监听器的生命周期

这里是一个非常大误区,这个监听器的销毁并不会随着方法的结束而结束。

一旦监听器注册完成,它就会一直保持活跃状态,直到满足以下条件之一:

  • EditText 控件被销毁:在 Activity 的onDestroy()方法执行之后。
  • 手动移除监听器:调用etUserName.removeTextChangedListener(...)方法。

1:代码

这里主要对用户名设置文本监听

	private void initEditText(){etUserName = findViewById(R.id.et_user_name);etPassword = findViewById(R.id.et_password);etUserName.addTextChangedListener(new TextWatcher() {@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {Log.e(TAG,"CharSequence s" + s +  "," + " int start" + start +"," + " int count" + count + "," + "int after" + after);}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {Log.e(TAG,"CharSequence s" + s +  "," + " int start" + start +"," + " int count" + count + "," + "int after" + count);}@Overridepublic void afterTextChanged(Editable s) {Log.e(TAG,"afterTextChanged:" + s.toString());}});}

我们设置一个类TAG成员变量方便查看日志(快捷方式logt)

private static final String TAG = "CheckBoxActivity";//自己设置TAG名称

2:结果和日志分析

我们在用户名输入框中输入admin

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查看日志

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

删掉下标为2的字符m

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

查看日志

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

注:以下方法的分析只针对删除“admin”中字符‘m’的操作

3:beforeTextChanged

文本发生变化前被调用,有四个参数

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {Log.e(TAG,"CharSequence s" + s +  "," + " int start" + start +"," + " int count" + count + "," + "int after" + after);}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CharSequence s

代表文本变化前(初始内容)

EditText 里原本的文字内容为“admin”,那s = admin

int start

表示文本中即将发生变化的起始位置索引

删除了“m”,索引位置为 2,start 就是 2 (这里替换操作同理)

int count

start 位置开始, “要被‘干掉’的旧字符数量”

m被干掉了,所以count = 1

提问:如果新字符和旧字符相同呢?

只要文本框的内容==经历了 “替换” 过程(无论替换前后内容是否一致),方法都会被触发,内部逻辑正常计算,==

int after

代表文本变化后,从 start 位置开始新增的字符数量

没有新增内容 after = 0

4:onTextChanged

文本变化时触发(如用户输入过程中)

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {Log.e(TAG,"CharSequence s" + s +  "," + " int start" + start +"," + " int count" + count + "," + "int after" + count);}

前两个参数与beforeTextChanged参数相同

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

CharSequence s

代表文本变化时(初始内容)

EditText 里原本的文字内容为“adin”,那s = adin

int start

表示文本中即将发生变化的起始位置索引

删除了“m”,索引位置为 2,start 就是 2 (这里替换操作同理)

int before

原文本被替换的长度,其实就是beforeTextChanged中的count(被干掉的数量)

这里是删除操作,也就是m被替换成了空,所以bfore = 1

int count

代表变化后,从 start 位置新增的字符数量

延续上面例子,若删掉 “m”,没有新增操作,那count = 0

5:afterTextChanged方法

文本变化后的最终完整内容

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@Override
public void afterTextChanged(Editable s) {Log.e(TAG,"afterTextChanged:" + s.toString());
}

6:总结

方法触发时机参数含义
beforeTextChanged文本变化前触发(如用户输入前)。- s:变化前的文本。
- start:变化开始的位置。
- count:即将被替换的原文本长度。
- after:新文本的长度。
onTextChanged文本变化时触发(如用户输入过程中)。- s:变化后的文本。
- start:变化开始的位置。
- before:原文本被替换的长度(即 beforeTextChanged 中的 count)。
- count:新插入的文本长度(即 beforeTextChanged 中的 after)。
afterTextChanged文本变化后-Editable s这里的 s 代表 文本变化后的最终完整内容 。类型可以转化为字符串类型

应用场景:哇嘎嘎嘎,实时获取输入的内容进行搜索

http://www.dtcms.com/a/284207.html

相关文章:

  • 聚观早报 | 英伟达股价再创新高;中国联通eSIM手机业务开通上线;中国AI加速出海 阿里云提供全栈能力支持
  • Linux之Zabbix分布式监控篇(二)
  • Flutter基础(前端教程①②-序列帧动画)
  • element-plus——图标推荐
  • 【JAVA新特性】Java 8 新特性实战
  • 网络安全威胁下的企业困境与破局技术实践
  • string + 栈 bitset 可达性统计(拓扑排序)
  • 浅探C语言的回调函数(Callback Function)
  • CD54.【C++ Dev】vector和list的反向迭代器的实现
  • 大语言模型Gemini Deep Research 全流程解读+使用攻略
  • uniapp云打包安卓
  • ADVB时序图
  • Spring Boot基于AOP的本地/远程调用动态路由实践
  • 如何在银河麒麟桌面系统中启用 sudo 密码的星号反馈
  • QT之openGL使用(一)
  • 燕之屋打造多元化产品组合,引领行业迈向高质量发展新里程
  • 心通达OA知识管理平台:高效解决单位知识管理难题
  • 点晴模切ERP帮忙模切行业向数智化管理转型
  • Rocky Linux 9 源码包安装php7
  • 如何通过mac的前24bit,模糊确认是那一台什么样的设备
  • macOS 字体管理全攻略:如何查看已安装字体及常见字体格式区
  • 从基础到实战:.NET 反射机制的进阶用法与最佳实践
  • Tekla多部门协作,授权资源如何共享与调度?
  • 暑期算法训练.3
  • day29:零基础学嵌入式之线程1.0
  • HTML 极简个人介绍卡片(侧重语义化标签和响应式布局)
  • pytorch小记(三十二):深度解析 PyTorch 的 `torch.remainder`:向下取整余数运算
  • 【web安全】DVWA存储型XSS分析与利用
  • 第6天| openGauss中用户一次只能连接到一个数据库,没法访问其他数据库的对象
  • arping(ARP协议网络测试工具)