Android EditText 字数限制以及设置中文及中文符号算两个字符,英文及英文符号算一个字符的实现
/**
* EditText字符数限制
* (中文及中文字符算两个字符,英文及英文字符算两个字符)
*/
public class EditTextLengthHelper {
static EditTextLengthHelper instance;private EditTextLengthHelper() {}public static EditTextLengthHelper getInstance() {if (null == instance) {synchronized (EditTextLengthHelper.class) {if (null == instance) {instance = new EditTextLengthHelper();}}}return instance;
}/*** 设置EditText的字数限制** @param textLength 需要限制的字符数量* @return*/
public InputFilter lengthResult(int textLength) {InputFilter filter = new InputFilter() {@Overridepublic CharSequence filter(CharSequence src, int start, int end, Spanned dest, int dstart, int dend) {int dindex = 0;int count = 0;while (count <= textLength && dindex < dest.length()) {char c = dest.charAt(dindex++);//这里是根据ACSII值进行判定的中英文,其中中文及中文符号的ACSII值都是大于128的if (c <= 128) {count = count + 1;} else {count = count + 2;}}if (count > textLength) {return dest.subSequence(0, dindex - 1);}int sindex = 0;while (count <= textLength && sindex < src.length()) {char c = src.charAt(sindex++);if (c < 128) {count = count + 1;} else {count = count + 2;}}if (count > textLength) {sindex--;}return src.subSequence(0, sindex);}};return filter;
}
/**
* 我需要做的是带有字数统计的所以会出现以下代码,
* 如果需求不需要有字数限制(例如微信设置昵称只是有字符数量的限制并没有字符数量的统计)
* 那么这段代码可以忽略
*
*/
/*** EditText输入,统计字数改变* (中文及中文字符算两个字符,英文及英文字符算一个字符)** @param mEditText* @return*/
public int editTextNum(EditText mEditText) {int mTextMaxlenght = 0;Editable editable = mEditText.getText();String str = editable.toString();int selEndIndex = Selection.getSelectionEnd(editable);for (int i = 0; i < str.length(); i++) {char charAt = str.charAt(i);if (charAt <= 128) {mTextMaxlenght++;} else {mTextMaxlenght += 2;}if (mTextMaxlenght > 24) {String newStr = str.substring(0, i);mEditText.setText(newStr);editable = mEditText.getText();int newLen = editable.length();if (selEndIndex > newLen) {selEndIndex = editable.length();}}}Selection.setSelection(editable, selEndIndex);return mTextMaxlenght;
}
以上是实现该功能所需要的代码,现在我们来说以下用法,其实很简单,就是在EditText的addTextChangedListener监听中的onTextChanged方法中进行操作
示例:
mEditNickName.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}@RequiresApi(api = Build.VERSION_CODES.N)@Overridepublic void onTextChanged(CharSequence charSequence, int start, int before, int count) {//其中这一行代码就是实现该功能的调用,因为我们需求是限制24个字符所以这里我传了一个24进去mTextNickNameNum.setText(EditTextLengthHelper.getInstance().editTextNum(mEditNickName) + "/24");}@Overridepublic void afterTextChanged(Editable editable) {}});
至此,该功能就已经介绍完毕。现在我来回顾一下EditText的addTextChangedListener监听中的onTextChanged方法,以此作为自己使用的参考
还以上述代码为例::其中
//charSequence 参数的意义为 输入框中改变后的字符串信息
//start 参数的意义为 输入框中改变后的字符串的起始位置
//before 参数的意义为 输入框中改变前的字符串的位置 默认为0
//count 参数的意义为 输入框中改变后的一共输入字符串的数量
这就是今天我要分享给大家的内容,希望各大神勿喷
Android EditText 字数限制以及设置中文及中文符号算两个字符,英文及英文符号算一个字符的实现相关推荐
- Android EditText之输入限制设置
转载:https://blog.csdn.net/shenggaofei/article/details/106314909 Android EditText之输入限制设置,适用于常用的产品需求 in ...
- android edittext字数显示不全,Android的EditText字数检测和限制解决办法
Android的EditText字数检测和限制解决办法 控件EditText在Android布局中经常用到,对EditText中输入的内容也经常需要进行限制,我们可以通过TextWatcher去观察输 ...
- Android EditText组件drawableLeft属性设置的图片和hint设置的文字之间的距离
有的时候,我们需要在文本框里放置icon图片,并且设置默认提示文字的时候,需要设置两者之间的间距,如下图: 这里想设置的就是之前的手机icon和"请输入手机号"之间的距离,则可是使 ...
- Android Edittext 手机号码格式输入设置
一. 效果图 根据需求要实现的是输入手机号码格式的数字文本,并且输入时能根据手机号码自动分隔成美观的带空格的格式,点击完成后能对手机号码验证是否是手机号码. 二. 代码实现 我使用的是动态添加代码的方 ...
- maxlength不起作用android,Android EditText禁止输入Emoji后设置android:maxLength失效的问题...
0X00 禁用emoji 有时候我们不想在EditText中输入Emoji表情,怎么处理呢? 我们可以通过设置InputFilter的方式来达到这个目的.怎么实现呢?直接上代码. public Inp ...
- android edittext 手机号码,Android Edittext 手机号码格式输入设置
一. 效果图 根据需求要实现的是输入手机号码格式的数字文本,并且输入时能根据手机号码自动分隔成美观的带空格的格式,点击完成后能对手机号码验证是否是手机号码. 二. 代码实现 我使用的是动态添加代码的方 ...
- Android EditText接收扫码枪输入,有时缺位,有时出现两次回车
最近做Android项目时,需要使用外接扫码枪扫描条码,并且接收条码输入的EditText同时还要能接收商品名称的输入,在开发调试的过程中发现,使用扫码枪时会出现条码信息丢失,或者扫码输入过程中出现两 ...
- Android EditText 属性详解
Android EditText 属性详解 EditText,本文包含大部分开发中用到的属性. Android开发之EditText属性详解 1.EditText输入的文字为密码形式的设置 (1)通过 ...
- android设置输入框输入字符限制,Android EditText限制输入字符的方法总结
Android EditText限制输入字符的方法总结 最近项目要求限制密码输入的字符类型, 例如不能输入中文. 现在总结一下EditText的各种实现方式, 以比较各种方法的优劣. 第一种方式 ...
最新文章
- 通过 React Hooks 声明式地使用 setInterval
- html的marquee滚动标签
- c++类与类之间关系
- 每个[NET]开发人员现在应该下载的十种必备工具
- [html] 说说video标签中预加载视频用到的属性是什么?
- each函数循环数据表示列举,列举循环的时候添加dom的方法
- tcp 三次握手,四次挥手
- python软件如何安装方法_【新手必看】Python软件下载及安装教程
- windows查看linux文件中文,Linux 系统下无法查看Windows 中创建的中文文件名
- 全新设计的 Xcode 12
- apache win下安装
- 黑苹果安装记录(史上最简单的安装教程——小白福利)
- 资产标签二维码方案设计
- postgresql 并发访问_postgresql 并发update下导致的死锁问题
- LeetCode - 644 子数组最大平均数 II
- Java中类型zhaun‘huan
- 深度强化学习+启发人类的决策智能,专访一家有愿景的中国企业「启元世界」...
- 万国觉醒计算器小工具
- 【转载】不是技术也能看懂云计算,大数据,人工智能
- 使用计算机辐射最大,电脑辐射范围距离是多大【详解】