千家信息网

Android如何实现EditText每4位自动添加空格效果

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要为大家展示了"Android如何实现EditText每4位自动添加空格效果",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Android如何实现
千家信息网最后更新 2026年11月04日Android如何实现EditText每4位自动添加空格效果

这篇文章主要为大家展示了"Android如何实现EditText每4位自动添加空格效果",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Android如何实现EditText每4位自动添加空格效果"这篇文章吧。

思路如下:

当输入框的内容改变时,就将内容取出拆分为一个一个的字符,在每4位的中间添加空格,最后一个4位不能添加。用这种拼接字符的方法是为了解决当用户删除中间的数字,会导致空格位置错位的问题。 当用户删除中间的字符时,要记录该动作并且记录光标位置,保证重新排序完成后,光标的位置在应该在的位置。

大概就这2步,就可以实现这个功能,下面一步一来,我们先实现空格的添加,保证内容永远满足4位后一个空格:

下面先看EditText的监听:

et_credit_number.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { //获取输入框中的内容,不可以去空格 String etContent = EditTextUtils.getText(et_credit_number); if (TextUtils.isEmpty(etContent)) { bt_submit.setEnabled(false); return; } //重新拼接字符串 String newContent = AppUtils.addSpeaceByCredit(etContent); //如果有改变,则重新填充 //防止EditText无限setText()产生死循环 if (!etContent.equals(newContent)) { et_credit_number.setText(newContent); //保证光标在最后,因为每次setText都会导致光标重置 //这样最基本地解决了光标乱跳的问题 et_credit_number.setSelection(newContent.length()); } //判断是否满足信用卡格式,注意去空格判断 if (MatcheUtils.isCreditNumber(newContent.replaceAll(" ", ""))) { bt_submit.setEnabled(true); return; } bt_submit.setEnabled(false); }});

没有难点,重新拼接字符串我单独封装了出来:

public static String addSpeaceByCredit(String content) { if (TextUtils.isEmpty(content)) { return ""; } //去空格 content = content.replaceAll(" ", ""); if (TextUtils.isEmpty(content)) { return ""; } //卡号限制为16位 if (content.length() > 16) { content = content.substring(0, 16); } StringBuilder newString = new StringBuilder(); for (int i = 1; i <= content.length(); i++) { //当为第4位时,并且不是最后一个第4位时 //拼接字符的同时,拼接一个空格 //如果在最后一个第四位也拼接,会产生空格无法删除的问题 //因为一删除,马上触发输入框改变监听,又重新生成了空格 if (i % 4 == 0 && i != content.length()) { newString.append(content.charAt(i - 1) + " "); } else { //如果不是4位的倍数,则直接拼接字符即可 newString.append(content.charAt(i - 1)); } } return newString.toString();}

这里每一步的含义,我都写了注释,应该问题不大,下面运行一下:

完美!空格正常添加了!

但是光标乱跳的问题,我特地演示了一下。

用字符排序的方式来做这个功能的原因是这个,当用户从中间删除字符时,我们需要将所有添加的空格位置都进行审查,并重新进行空格的添加,所以我认为重新排序字符是非常恰当的一种做法。当然这仅仅是我的愚见,可能有更优的做法。

现在我们就要进行第二步,当用户删除中间字符时,我们要判断用户本次操作是删除字符,并且保存本次删除的光标位置,在删除完成、排序完成之后,将光标移动到保存的光标位置。

思路有了,下面就看最终代码好了。

输入框监听的代码:

et_credit_number.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { //因为重新排序之后setText的存在 //会导致输入框的内容从0开始输入,这里是为了避免这种情况产生一系列问题 if (start == 0 && count > 0) { return; } String editTextContent = EditTextUtils.getText(et_credit_number); if (TextUtils.isEmpty(editTextContent) || TextUtils.isEmpty(lastString)) { return; } editTextContent = AppUtils.addSpeaceByCredit(editTextContent); //如果最新的长度 < 上次的长度,代表进行了删除 if (editTextContent.length() <= lastString.length()) { deleteSelect = start; } else { deleteSelect = editTextContent.length(); } } @Override public void afterTextChanged(Editable s) { //获取输入框中的内容,不可以去空格 String etContent = EditTextUtils.getText(et_credit_number); if (TextUtils.isEmpty(etContent)) { bt_submit.setEnabled(false); return; } //重新拼接字符串 String newContent = AppUtils.addSpeaceByCredit(etContent); //保存本次字符串数据 lastString = newContent; //如果有改变,则重新填充 //防止EditText无限setText()产生死循环 if (!etContent.equals(newContent)) { et_credit_number.setText(newContent); //保证光标的位置 et_credit_number.setSelection(deleteSelect > newContent.length() ? newContent.length() : deleteSelect); } //判断是否满足信用卡格式,注意去空格判断 if (MatcheUtils.isCreditNumber(newContent.replaceAll(" ", ""))) { bt_submit.setEnabled(true); return; } bt_submit.setEnabled(false); }});

这边主要利用了onTextChanged()的监听,判断用户操作是删除操作时,保存光标的位置。

以上是"Android如何实现EditText每4位自动添加空格效果"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

空格 字符 光标 位置 内容 用户 问题 输入 排序 监听 效果 篇文章 保证 代码 信用 信用卡 做法 功能 字符串 思路 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南京欣网互联网络科技 百单网互联网科技有限公司 南京欣网互联网络科技有限公司 河南云网互联网络科技有限公司 亿策互联网科技 互联网科技缩写 互联网科技公司介绍 互联网科技公司做什么 无锡溥仪互联网科技有限公司 华中科技有哪些互联网大佬 银川新华互联网科技学校地址 宁夏众和广鑫互联网科技有限公司 互联网经济与金融科技 华夏互联网科技业 滨湖区互联网智能科技产品有哪些 江苏苏星互联网科技有限公司 国产互联网科技公司 玉溪新华互联网科技怎么选 互联网对科技影响 伍佰万互联网科技是干嘛的 为想互联网科技怎么样 盈实互联网科技 互联网与科技发展 期待互联网科技 联恩商钥互联网科技有限公司 科技互联网的估值 互联网数据科技专业 智帮互联网科技公司最近动向 广州百诚互联网科技有限公司官网 郑州欣桑互联网科技有限公司
0