/**
* 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 字数限制以及设置中文及中文符号算两个字符,英文及英文符号算一个字符的实现相关推荐

  1. Android EditText之输入限制设置

    转载:https://blog.csdn.net/shenggaofei/article/details/106314909 Android EditText之输入限制设置,适用于常用的产品需求 in ...

  2. android edittext字数显示不全,Android的EditText字数检测和限制解决办法

    Android的EditText字数检测和限制解决办法 控件EditText在Android布局中经常用到,对EditText中输入的内容也经常需要进行限制,我们可以通过TextWatcher去观察输 ...

  3. Android EditText组件drawableLeft属性设置的图片和hint设置的文字之间的距离

    有的时候,我们需要在文本框里放置icon图片,并且设置默认提示文字的时候,需要设置两者之间的间距,如下图: 这里想设置的就是之前的手机icon和"请输入手机号"之间的距离,则可是使 ...

  4. Android Edittext 手机号码格式输入设置

    一. 效果图 根据需求要实现的是输入手机号码格式的数字文本,并且输入时能根据手机号码自动分隔成美观的带空格的格式,点击完成后能对手机号码验证是否是手机号码. 二. 代码实现 我使用的是动态添加代码的方 ...

  5. maxlength不起作用android,Android EditText禁止输入Emoji后设置android:maxLength失效的问题...

    0X00 禁用emoji 有时候我们不想在EditText中输入Emoji表情,怎么处理呢? 我们可以通过设置InputFilter的方式来达到这个目的.怎么实现呢?直接上代码. public Inp ...

  6. android edittext 手机号码,Android Edittext 手机号码格式输入设置

    一. 效果图 根据需求要实现的是输入手机号码格式的数字文本,并且输入时能根据手机号码自动分隔成美观的带空格的格式,点击完成后能对手机号码验证是否是手机号码. 二. 代码实现 我使用的是动态添加代码的方 ...

  7. Android EditText接收扫码枪输入,有时缺位,有时出现两次回车

    最近做Android项目时,需要使用外接扫码枪扫描条码,并且接收条码输入的EditText同时还要能接收商品名称的输入,在开发调试的过程中发现,使用扫码枪时会出现条码信息丢失,或者扫码输入过程中出现两 ...

  8. Android EditText 属性详解

    Android EditText 属性详解 EditText,本文包含大部分开发中用到的属性. Android开发之EditText属性详解 1.EditText输入的文字为密码形式的设置 (1)通过 ...

  9. android设置输入框输入字符限制,Android EditText限制输入字符的方法总结

    Android EditText限制输入字符的方法总结 最近项目要求限制密码输入的字符类型, 例如不能输入中文.   现在总结一下EditText的各种实现方式,  以比较各种方法的优劣. 第一种方式 ...

最新文章

  1. 通过 React Hooks 声明式地使用 setInterval
  2. html的marquee滚动标签
  3. c++类与类之间关系
  4. 每个[NET]开发人员现在应该下载的十种必备工具
  5. [html] 说说video标签中预加载视频用到的属性是什么?
  6. each函数循环数据表示列举,列举循环的时候添加dom的方法
  7. tcp 三次握手,四次挥手
  8. python软件如何安装方法_【新手必看】Python软件下载及安装教程
  9. windows查看linux文件中文,Linux 系统下无法查看Windows 中创建的中文文件名
  10. 全新设计的 Xcode 12
  11. apache win下安装
  12. 黑苹果安装记录(史上最简单的安装教程——小白福利)
  13. 资产标签二维码方案设计
  14. postgresql 并发访问_postgresql 并发update下导致的死锁问题
  15. LeetCode - 644 子数组最大平均数 II
  16. Java中类型zhaun‘huan
  17. 深度强化学习+启发人类的决策智能,专访一家有愿景的中国企业「启元世界」...
  18. 万国觉醒计算器小工具
  19. 【转载】不是技术也能看懂云计算,大数据,人工智能
  20. 使用计算机辐射最大,电脑辐射范围距离是多大【详解】

热门文章

  1. 地球坐标系,火星坐标系,百度坐标系
  2. C语言-字符串的定义及使用
  3. 在线支付系列【1】支付演变史
  4. 微信小程序--初窥开发模板
  5. linux gcc版本的选择,linux下gcc版本更改
  6. React 中的高阶组件及其应用场景
  7. 【GRNN分类】基于matlab GA优化GRNN超参数分类【含Matlab源码 1399期】
  8. COBOL语言初级教程 1 --COBOL简介
  9. 强大的Excel工作表导航工具
  10. SpringBoot JPA 建立联合主键