1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Android实战场景 - 限制EditText仅支持输入数字 英文 汉字 禁止输入表情等特殊符号

Android实战场景 - 限制EditText仅支持输入数字 英文 汉字 禁止输入表情等特殊符号

时间:2021-08-17 11:01:23

相关推荐

Android实战场景 - 限制EditText仅支持输入数字 英文 汉字 禁止输入表情等特殊符号

因项目需求,需要禁止用户输入表情符号,具体如下 ~

EditText相关Blog

TextView、EditText属性大全监听 EditText 文本变化设置 EditText 光标颜色与下划线颜色EditText 禁止输入表情符号EditText 一键清除内容Android实战场景 - 输入手机号、银行卡号、身份证号时动态格式化

Hint:所谓"禁止输入表情符号",也可以理解为"只能输入数字、英文、汉字"

基本认知自定义TextWatcher + 正则过滤三方框架

基本认知

起初我以为有俩种方式可以实现这个功能

第一种键盘弹出不显示表情选项,从根源解决问题失败,因为每个手机的Rom烧制都是固定的,很难去操作,主要是水平有限)第二种正常显示表情选项,但是输入之后EditText进行过滤,不做显示处理,这样我们传输的时候就不会出现错误

后来再回头的看的时候,发现常见的有俩种方式实现我们的需求

通过正则过滤禁止输入的内容(也就是上方的第二种方式)通过三方框架做处理,大多实现原理相同

自定义TextWatcher + 正则过滤

限制正则:[^a-zA-Z0-9\u4E00-\u9FA5]

使用方式:etName.addTextChangedListener(LimitInputTextWatcher(etName))

LimitInputTextWatcher(自定义TextWatcher,内部定义了仅支持输入数字、英文、汉字的过滤规则)-可直接Copy

import android.text.Editable;import android.text.TextWatcher;import android.widget.EditText;public class LimitInputTextWatcher implements TextWatcher {//etprivate EditText et = null;//筛选条件private String regex;//默认的筛选条件(正则:只能输入中文、英文、数字)private String DEFAULT_REGEX = "[^a-zA-Z0-9\u4E00-\u9FA5]";/*** 构造方法** @param et*/public LimitInputTextWatcher(EditText et) {this.et = et;this.regex = DEFAULT_REGEX;}/*** 构造方法** @param et et* @param regex 筛选条件(如果要使用该构造参数,要自定义正则)*/public LimitInputTextWatcher(EditText et, String regex) {this.et = et;this.regex = regex;}@Overridepublic void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}@Overridepublic void afterTextChanged(Editable editable) {String str = editable.toString();String inputStr = clearLimitStr(regex, str);et.removeTextChangedListener(this);// et.setText方法可能会引起键盘变化,所以用editable.replace来显示内容editable.replace(0, editable.length(), inputStr.trim());et.addTextChangedListener(this);}/*** 清除不符合条件的内容** @param regex* @return*/private String clearLimitStr(String regex, String str) {return str.replaceAll(regex, "");}}

借鉴自 - android 利用正则表达式 控制EditText只能输入数字、英文、汉字

方式扩展:以下方法,尚且未测,仅作记录

//昵称仅支持10位字母/数字/中文//限制只能输入中文,英文,数字InputFilter typeFilter = new InputFilter() {@Overridepublic CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {Pattern p = pile("[0-9a-zA-Z|\u4e00-\u9fa5]+");Matcher m = p.matcher(source.toString());if (!m.matches()) return "";return null;}};//如果要限制输入字数,数组中加上new InputFilter.LengthFilter(maxLength)vEtNickName.setFilters(new InputFilter[]{typeFilter, new InputFilter.LengthFilter(10)});

三方框架

查询一些网上的处理方案,有的朋友是通过一些正则过滤,有的是通过自定义类去做处理,当然应该都是通过校验实现的,这里我在Github找到了一个自定义控件内置表情处理,可以直接拿来用,但是要详情使用的话,最好熟悉一下对应的属性信息。

Github作者介绍该自定义控件拥有以下功能

带删除功能的EditText显示或者隐藏密码可设置自动添加分隔符分割电话号码、银行卡号等支持禁止Emoji表情符号输入

关于EditTextinputType输入类型,可以直接查看 TextView、EditText属性大全

使用方式

build

compile 'com.xw.repo:xedittext:1.0.6@aar'

Layout(父布局加入命名空间)

xmlns:app="/apk/res-auto"

设置方式:EditText限制输入信息(有数字,密码等,但不包含表情)

android:inputType=""

EditText(所用代码)

<com.xw.repo.xedittext.XEditTextandroid:layout_width="match_parent"android:layout_height="161dp"android:background="@null"android:gravity="top"android:hint="请分享相关问题"android:paddingLeft="17dp"android:textColor="#999999"android:textSize="13sp"app:x_disableEmoji="true" />

常见功能

禁止表情app:x_disableEmoji="true"一键清除app:x_disableClear="true"hint显示位置android:gravity="top"取消Edit原有的下划线背景android:background="@null"

如有更多需求,可前往另一位Blog友那儿进行查看哦 ~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。