美文网首页待写
Android 间隔显示电话号码

Android 间隔显示电话号码

作者: peachFestival | 来源:发表于2022-03-06 16:02 被阅读0次

Android 间隔显示电话号码

概述

项目经理提了一个需求,要求输入框的手机号码以xxx xxxx xxxx的格式显示,网上找了一些文章发现或多或少都存在一些bug(光标位置bug),于是决定自己写一个,直接上代码。

代码

private int selection = 0;//手机号输入框光标位置
private final String separator = " ";//分隔符
private EditText etUsername;

etUsername.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                //do nothing
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                String text = s.toString();
                boolean isPass = true;
                for (int i = 0; i < text.length(); i ++) {
                    boolean isDivide = separator.equals(text.substring(i, i+1));
                    if ((i == 3||i == 8)&&!isDivide) {//指定位置不为分隔符
                        isPass = false;
                        break;
                    }
                    if (isDivide&&i != 3&&i != 8) {//非指定位置为分隔符
                        isPass = false;
                        break;
                    }
                    if ((i == text.length()-1)&&isDivide) {//最后一位为分隔符(删除操作)
                        isPass = false;
                        break;
                    }
                }

                if (!isPass) {
                    StringBuffer sb = new StringBuffer(text.replaceAll(separator, ""));
                    if (count == 1) {//输入字符 设置光标位置
                        if (start == 3||start == 8) {
                            selection = start + 2;
                        } else {
                            selection = start + 1;
                        }
                    } else if (before == 1) {//删除字符 设置光标位置
                        selection = start;

                        //删除的为分隔符,需将分隔符前一个字符删除
                        if (start == 3) {
                            sb.delete(start - 1, start);
                            selection = start - 1;
                        } else if (start == 8) {
                            sb.delete(start - 2, start - 1);
                            selection = start - 1;
                        }

                        if (separator.equals(text.substring(text.length()-1))){//最后一位为分隔符
                            selection = start - 1;
                        }
                    }

                    //添加分隔符
                    if (sb.length() > 3) {
                        sb.insert(3, separator);
                    }
                    if (sb.length() > 8) {
                        sb.insert(8, separator);
                    }
                    etUsername.setText(sb.toString());
                }

                if (before > 1||count > 1) {//setText方法时设置 光标位置
                    if (etUsername.getText().toString().length() >= selection) {
                        etUsername.setSelection(selection);
                        selection = 0;
                    }
                }
            }

            @Override
            public void afterTextChanged(Editable editable) {
                //do nothing
            }
        });

说明

可以再抽象一层自定义间隔位置兼容实现类似银行卡XXXX XXXX XXXX XXXX等的分隔。感觉自己写的有点复杂,有更好的实现方式欢迎大家指教。

相关文章

  • Android 间隔显示电话号码

    Android 间隔显示电话号码 概述 项目经理提了一个需求,要求输入框的手机号码以xxx xxxx xxxx的格...

  • EditText属性

    1. 密码显示隐藏 android:password="true" 2.电话号码模式 Android:phon...

  • Android组件TextView属性

    android:autoLink: 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的...

  • TextView属性大全!

    android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接...

  • TextView属性大全

    android:autoLink 设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链...

  • TextView属性大全

    android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接...

  • UITableView 间隔线显示问题

    1、间隔线的样式 1.1、间隔线设置方法 1.2、三种系统间隔线样式: 1.3、分割线从边界开始方法 2、去掉间隔...

  • Swift学习记录

    1.实现输入手机号码间隔显示

  • Android性能优化:绘制优化

    一、Android系统显示原理 Android的显示过程可以简单概括为:Android应用程序把经过测量、布局、绘...

  • TextView常用属性介绍

    属性名称 描述 android:autoLink设置是否当文本为URL链接/email/电话号码/map时...

网友评论

    本文标题:Android 间隔显示电话号码

    本文链接:https://www.haomeiwen.com/subject/fbhnrrtx.html