Android EditText限制输入字符的5种实现方式(1)

本文介绍了在Android开发中四种实现EditText输入字符过滤的方法:使用replace和trim函数,InputFilter的filter方法,正则表达式判断,以及通过LimitEditText限制输入。作者分享了如何创建系统化的学习资源,帮助开发者高效提升技能和规划职业生涯。
摘要由CSDN通过智能技术生成

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 = “1+$”;

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

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)

写在最后

在技术领域内,没有任何一门课程可以让你学完后一劳永逸,再好的课程也只能是“师傅领进门,修行靠个人”。“学无止境”这句话,在任何技术领域,都不只是良好的习惯,更是程序员和工程师们不被时代淘汰、获得更好机会和发展的必要前提。

如果你觉得自己学习效率低,缺乏正确的指导,可以一起学习交流!

加入我们吧!群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的Android交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。

35岁中年危机大多是因为被短期的利益牵着走,过早压榨掉了价值,如果能一开始就树立一个正确的长远的职业规划。35岁后的你只会比周围的人更值钱。

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!


  1. \u4E00-\u9FA5 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值