Android EditText限制输入字符的方法总结
发布时间 - 2026-01-11 02:27:11 点击率:次Android EditText限制输入字符的方法总结

最近项目要求限制密码输入的字符类型, 例如不能输入中文。 现在总结一下EditText的各种实现方式, 以比较各种方法的优劣。
第一种方式: 设置EditText的inputType属性,可以通过xml或者Java文件来设置。假如我要设置为显示密码的形式,可以像下面这样设置:
在xml中, Android:inputType="textPassword"
在java文件中,可以用 ev.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
inputType参数有phone、textPasswrod等等属性, 有兴趣的话可以测试一下。
第二种: 设置EditText的android:digits 属性, 这种方式可以指出要支持的字符。比如要限制只能输入数字和字母,可以这样:
android:digits="0123456789abcdefghijklmnopqrstuvwxyz"。
PS:吐槽一下,写着好累,不支持区间操作符~或-
第三种: 使用TextWather监听EditText的字符变化, 当内容改变时删掉不想要的字符。说白了就是用户可以随便按键盘,在代码里马上删掉非法字符。 PS: 常见的搜索功能输入框就是用TextWatcher监测关键词变化,然后查数据并显示出来了。示例代码:只能输入字母或者数字, 如果要支持其它字符可以修改regEx正则表达式。
evPwd = (EditText) findViewById(R.id.ev_password);
evPwd.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
String editable = evPwd.getText().toString();
String regEx = "[^a-zA-Z0-9]"; //只能输入字母或数字
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(editable);
String str = m.replaceAll("").trim(); //删掉不是字母或数字的字符
if(!editable.equals(str)){
evPwd.setText(str); //设置EditText的字符
evPwd.setSelection(str.length()); //因为删除了字符,要重写设置新的光标所在位置
}
}
第四种:通过InputFilter来实现。实现InputFilter过滤器, 需要覆盖一个叫filter的方法。
public abstract CharSequence filter ( CharSequence source, //输入的文字 int start, //开始位置 int end, //结束位置 Spanned dest, //当前显示的内容 int dstart, //当前开始位置 int dend //当前结束位置 );
注意: IntentFilter是个数组, 也就是说可以写多个过滤条件!
下面的实现使得EditText只接收字符(数字、字母),Character.isLetterOrDigit会把中文也当做Letter, 所以要在写个正则判断是否中文。
evPwd.setFilters(new InputFilter[]{
new InputFilter() {
@Override
public CharSequence filter(CharSequence charSequence, int i, int i1, Spanned spanned, int i2, int i3) {
String regex = "^[\u4E00-\u9FA5]+$";
boolean isChinese = Pattern.matches(regex, charSequence.toString());
if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {
return "";
}
return null;
}
}
});
第五种: 使用EditText的InputConnection属性限制输入字符。 新建个类继承于EditText并覆盖onCreateInputConnection函数, 在xml里使用LimitText替换EditText。
public class LimitEditText extends EditText {
public LimitEditText(Context context) {
super(context);
}
public LimitEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LimitEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
/**
* 输入法
* @param outAttrs
* @return
*/
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new InnerInputConnecttion(super.onCreateInputConnection(outAttrs),
false);
}
class InnerInputConnecttion extends InputConnectionWrapper implements InputConnection {
public mInputConnecttion(InputConnection target, boolean mutable) {
super(target, mutable);
}
/**
* 对输入的内容进行拦截
*
* @param text
* @param newCursorPosition
* @return
*/
@Override
public boolean commitText(CharSequence text, int newCursorPosition) {
// 只能输入字母或者数字
if (!Character.isLetterOrDigit(charSequence.charAt(i)) || isChinese) {
return false;
}
return super.commitText(text, newCursorPosition);
}
@Override
public boolean sendKeyEvent(KeyEvent event) {
return super.sendKeyEvent(event);
}
@Override
public boolean setSelection(int start, int end) {
return super.setSelection(start, end);
}
}
}
以上是EditText输入限制的所有方法, 大家如有疑问,请留言或到本站社区讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android
# EditText限制输入字符
# EditText限制输入字符的五种方法
# EditText
# Android EditText限制输入字数的方法
# Android编程中EditText限制文字输入的方法
# Android开发中给EditText控件添加TextWatcher监听实现对输入字数的限制(推荐)
# Android EditText限制输入字符类型的方法总结
# Android TextWatcher监控EditText中的输入内容并限制其个数
# Android EditText限制输入整数和小数的位数的方法示例
# Android最简单的限制输入方法(只包含数字、字母和符号)
# 关键词
# 是个
# 我要
# 多个
# 如有
# 可以用
# 要在
# 可以通过
# 希望能
# 有兴趣
# 重写
# 不支持
# 写着
# 会把
# 一个叫
# 用户可以
# 谢谢大家
# 说白了
# 设置为
# 来实现
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在Tomcat中配置并部署网站项目?
CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
香港服务器WordPress建站指南:SEO优化与高效部署策略
微信小程序 wx.uploadFile无法上传解决办法
Linux网络带宽限制_tc配置实践解析【教程】
如何用腾讯建站主机快速创建免费网站?
高防服务器租用指南:配置选择与快速部署攻略
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel如何发送系统通知?(Notification渠道示例)
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
如何在宝塔面板中创建新站点?
Java类加载基本过程详细介绍
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
JS弹性运动实现方法分析
实现点击下箭头变上箭头来回切换的两种方法【推荐】
北京网站制作的公司有哪些,北京白云观官方网站?
JS经典正则表达式笔试题汇总
Laravel如何使用Telescope进行调试?(安装和使用教程)
,交易猫的商品怎么发布到网站上去?
如何确保西部建站助手FTP传输的安全性?
iOS发送验证码倒计时应用
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
nginx修改上传文件大小限制的方法
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
Laravel Docker环境搭建教程_Laravel Sail使用指南
如何在自有机房高效搭建专业网站?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Python高阶函数应用_函数作为参数说明【指导】
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Python并发异常传播_错误处理解析【教程】
在centOS 7安装mysql 5.7的详细教程
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
HTML透明颜色代码在Angular里怎么设置_Angular透明颜色使用指南【详解】
Swift中swift中的switch 语句
php结合redis实现高并发下的抢购、秒杀功能的实例
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
MySQL查询结果复制到新表的方法(更新、插入)
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
如何在企业微信快速生成手机电脑官网?
详解Huffman编码算法之Java实现
Laravel如何与Pusher实现实时通信?(WebSocket示例)
google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
javascript读取文本节点方法小结
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?

