【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.pswp.cn/diannao/91572.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/91572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL 中根据当前时间动态计算日期范围

在 SQL 中写“动态时间”通常是指根据当前时间动态计算日期范围&#xff0c;而不是写死固定日期。以下是几种常见写法&#xff08;以 SQL Server / MySQL / PostgreSQL 为例&#xff09;&#xff1a;1. 获取当前时间-- SQL Server SELECT GETDATE() AS now-- MySQL SELECT NOW(…

react-redux 类组件的 connect

store 目录下 store/reducer.js import * as actionTypes from ./constantsconst initalState {counter: 100,banners: [],recommends: [] }/*** 定义reducer函数&#xff1a;纯函数* param 参数一&#xff1a;store中目前保存的state* param 参数二&#xff1a;通过 dispatch…

数据分布是如何影响目标检测精度

文章目录一、研究背景与目标模型效果提升数据集优化二、研究问题明细各方向的关联性与核心逻辑1. 高质量数据集的高效筛选与主动学习应用2. 基于推理结果的数据补充与增强方向优化3. 多类别场景下目标尺度与模型精度的关联性4. 损失函数与数据增强对精度的量化影响5. 目标类型专…

高效批量转换Java接口为MCP服务:降低重复劳动的实战指南

高效批量转换Java接口为MCP服务:降低重复劳动的实战指南 在AI大模型技术飞速发展的今天,企业需要将现有Java接口快速适配为模型计算协议(MCP,Model Calculation Protocol)服务,以便与大模型生态无缝对接。然而,手动逐个转换接口不仅耗时耗力,还容易因人为疏忽导致错误…

Eclipse Debug 配置指南

Eclipse Debug 配置指南 引言 Eclipse 作为一款功能强大的集成开发环境(IDE),在Java开发者中享有盛誉。在开发过程中,调试功能是必不可少的。本文将详细介绍如何在Eclipse中配置调试环境,以便更高效地进行代码调试。 1. 开发环境准备 在开始配置Eclipse调试环境之前,…

modelscope ProxyError: HTTPSConnectionPool(host=‘www.modelscope.cn‘, port=443)

目录 Windows CMD&#xff1a; powershell Linux / macOS / Git Bash&#xff1a; win11 设置全局系统变量代理 modelscope ProxyError: HTTPSConnectionPool(hostwww.modelscope.cn, port443) 报错&#xff1a; requests.exceptions.ProxyError: HTTPSConnectionPool(host…

Python学习之——序列化与反序列化

Python学习之——序列化与反序列化yaml & json & xmlyamljsonPython自带Json库xml一个综合示例pickle & msgpack & marshalpicklemsgpackmarshal自定义导出py文件一个导出py文件的示例yaml & json & xml YAML & JSON &XML 如何选择 yaml Py…

设计模式之代理模式:掌控对象访问的优雅之道

代理模式&#xff1a;掌控对象访问的优雅之道 引言&#xff1a;设计模式的重要性 在软件开发中&#xff0c;设计模式是解决常见问题的可复用方案&#xff0c;它们如同建筑师的蓝图&#xff0c;为开发者提供了经过验证的最佳实践。在23种经典设计模式中&#xff0c;代理模式因其…

sqli-labs靶场通关笔记:第18-19关 HTTP头部注入

第18关 User-Agent注入登录正确的用户名密码&#xff0c;它会将User-Agent的信息回显到页面上。猜测UA头可能存在注入点。利用bp抓包&#xff0c;在UA头后面加一个单引号&#xff0c;发现报错了。观察报错信息&#xff0c;显示nearxx,admin)&#xff0c;推测后面应该还有两个参…

基于按键开源MultiButton框架深入理解代码框架(三)(指针的深入理解与应用)

文章目录3、分析代码3.3 按键的插入3.4 按键的删除3.5 继续分析状态机核心理解4、写在最后的总结5、思想感悟篇6、慈悲不渡自绝人3、分析代码 3.3 按键的插入 // Button handle list headstatic Button* head_handle NULL;/*** brief Start the button work, add the handle…

ACOUSLIC-AI挑战报告:基于低收入国家盲扫超声数据的胎儿腹围测量|文献速递-医学影像算法文献分享

Title题目ACOUSLIC-AI challenge report: Fetal abdominal circumferencemeasurement on blind-sweep ultrasound data from low-income countriesACOUSLIC-AI挑战报告&#xff1a;基于低收入国家盲扫超声数据的胎儿腹围测量01文献速递介绍胎儿生长受限&#xff08;FGR&#xf…

集群聊天服务器各个类进行详解

1.dh.h类定义概要类名&#xff1a; MySQL功能&#xff1a; 简化MySQL的连接、查询和更新操作&#xff0c;提供接口给上层应用使用。成员变量private:MYSQL *_conn;_conn&#xff1a;指向MYSQL结构体的指针&#xff0c;用于代表数据库连接实例。由mysql_init()初始化&#xff0c…

电缆安全双保险:不止防盗,更能防触电的塔能智慧照明守护方案

城市照明、地下车库以及园区路灯所涉及的电缆安全问题&#xff0c;向来都是运维管理方面颇为棘手的难题。在传统的运维管理模式之下&#xff0c;电缆一旦被盗&#xff0c;那么所造成的影响可不小&#xff0c;一方面会带来直接的经济损失&#xff0c;另一方面还极有可能因为线路…

Leetcode刷题营第二十九,三十题:二叉树的中序以及后序遍历

94.二叉树的中序遍历 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#x…

Rabbitmq Direct Exchange(直连交换机)可以保证消费不被重复消费吗,可以多个消费者,但是需要保证同一个消息,不会被投递给多个消费者

在 RabbitMQ 中&#xff0c;默认情况下&#xff0c;不能保证消息不被重复消费&#xff0c;但可以通过 队列绑定方式 消费者竞争机制 来确保 同一消息只被一个消费者处理。以下是几种可行的方案&#xff1a;方案 1&#xff1a;单队列 竞争消费者模式&#xff08;默认行为&…

常用的OTP语音芯片有哪些?

唯创知音在 OTP 语音芯片有着26年的历史&#xff0c;有着丰富的技术积累与产品迭代历程。1999 年&#xff0c;唯创知音在广州成立&#xff0c;彼时便开始在电子领域积极探索。2000 年&#xff0c;公司敏锐捕捉到语音芯片行业的发展潜力&#xff0c;正式进军该领域。经过数年技术…

分布式光伏发电系统中的“四可”指的是什么?

在分布式光伏电站规模爆发式增长的今天&#xff0c;“看不见、管不住、调不动”的难题却成为行业痛点。如何让散布各处的光伏电站真正成为稳定高效的“绿色能量站”&#xff1f;2025年《分布式光伏发电开发建设管理办法》大型工商业项目&#xff08;≥6MW&#xff09;明确要求具…

健康管理系统新趋势:AI + 物联网如何重塑健康管理

一、传统健康管理的痛点与变革之必然长久以来&#xff0c;我们熟悉的健康管理方式存在明显局限&#xff1a;数据孤岛严重&#xff1a;体检报告在抽屉里沉睡&#xff0c;健身手环数据仅存于手机&#xff0c;不同医疗机构信息互不相通&#xff0c;个人健康信息犹如碎片散落各处。…

git基本操作【GIT-2】

git基本操作初始化一个仓库&#xff08;repository&#xff09;、开始或停止跟踪&#xff08;track&#xff09;文件、暂存&#xff08;stage&#xff09;或提交&#xff08;commit&#xff09;更改如何配置 Git 来忽略指定的文件和文件模式、如何迅速而简单地撤销错误操作、如…

【数据准备】——深度学习.全连接神经网络

目录 1 数据加载器 1.1 构建数据类 1.1.1 Dataset类 1.1.2 TensorDataset类 1.2 数据加载器 2 数据加载案例 2.1 加载csv数据集 2.2 加载图片数据集 2.3 加载官方数据集 2.4 pytorch实现线性回归 1 数据加载器 分数据集和加载器2个步骤~ 1.1 构建数据类 1.1.1 Dat…