需要格式化的格式为:xxx xxxx xxxx

有两种方式:1.为监听当前输入的长度,当长度为第四位,九位的时候,在原内容上追加空格。(from stackOverFlow)2.每次输入后,格式化当前内容。

方式一:

public class PhoneEditText extends EditText implements TextWatcher {

    int beforeLen = 0;
int afterLen = 0; public PhoneEditText(Context context) {
super(context);
setInputType(InputType.TYPE_CLASS_PHONE);
setFilters(new InputFilter[]{new InputFilter.LengthFilter(13)});
addTextChangedListener(this);
} @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
beforeLen = s.length();
} @Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
} @Override
public void afterTextChanged(Editable s) {
String txt = s.toString();
if (txt.isEmpty()) return;
afterLen = s.length();
if (afterLen > beforeLen) {
if (afterLen == 4 || afterLen == 9) {
setText(new StringBuffer(txt).insert(txt.length() - 1, " ").toString());
}
} else {
if (txt.endsWith(" ") && (afterLen == 9 || afterLen == 4)) {
setText(new StringBuffer(txt).delete(afterLen - 1, afterLen).toString());
}
}
setSelection(afterLen);
} public String getPhoneNumber() {
CharSequence text = super.getText();
return text.toString().replaceAll(" ", "");
} public String getOriginalNumber() {
return getText().toString();
}
}

  第二种方法:

public class PhoneEditText extends EditText implements TextWatcher {

    public PhoneEditText(Context context) {
super(context);
setInputType(InputType.TYPE_CLASS_PHONE);
setFilters(new InputFilter[]{new InputFilter.LengthFilter(13)});
addTextChangedListener(this);
} @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 txt = getPhoneNumber();
if (txt.isEmpty()) return;
flag = !flag;
if (flag) {
String result = getFormatString(txt);
setText(result);
setSelection(result.length());
}
} boolean flag = false;
private String getFormatString(String str) {
String result;
if (str.length() > 7) {
result = str.substring(0, 3) + " " + str.substring(3, 7) + " " + str.substring(7, str.length());
} else if (str.length() > 3) {
result = str.substring(0, 3) + " " + str.substring(3, str.length());
} else {
result = str;
}
return result;
} public String getPhoneNumber() {
CharSequence text = super.getText();
return text.toString().replaceAll(" ", "");
} public String getOriginalNumber() {
return getText().toString();
}
}

  ps:第一种方法如果不按顺序输入,格式化不了。

第二种方法有待验证。

EditText 自动格式化电话电话号码的更多相关文章

  1. Android开发---基本UI组件1:自动拨电话,自动上网,输入框不换行、只输数字、只输文本、只输密码

    1.activity_main.xml 描述:构建一个按钮 <?xml version="1.0" encoding="utf-8"?> <L ...

  2. Cleave.js – 自动格式化表单输入框的文本内容

    Cleave.js 有一个简单的目的:帮助你自动格式输入的文本内容. 这个想法是提供一个简单的方法来格式化您的输入数据以增加输入字段的可读性.通过使用这个库,您不需要编写任何正则表达式来控制输入文本的 ...

  3. Eclipse保存文件时自动格式化代码

    实现效果:Ctrl+S会自动格式化并保存代码. 应用上图所示效果之后,在每次对Eclipse保存的时候都会实现自动格式化代码. 1. Fomated All lines,格式化该文件的所有代码:还是 ...

  4. 关于eclispe保存代码自动格式化的设置

    最近在项目开发,上级要求所有开发人员,代码必须格式和(Ctrl+Shift+F),但是还是会偶尔忘记格式化,今天看了有一种保存之后eclipse可以自动格式代码的设置 1.请大家在eclipse设置下 ...

  5. visual studio粘贴html代码.会自行添加一些未知代码(自动格式化)

    比如我们要粘贴这样一段代码到VS这里 <option {if empty($param.is_active)}selected=selected{/if}>请选择</option&g ...

  6. Eclipse中对Python代码自动格式化!

    在Eclipse中使用PyDev发现无法进行代码格式化,使用通常的"Ctrl+Shift+F"快捷键,没有任何变化,难道不能对python代码格式化了吗? 通过下面设置,就可以每次 ...

  7. JAVA_eclipse 保留Java文件时自动格式化代码和优化Import

    Eclipse 保存Java文件时自动格式化代码和优化Import Eclipse中format代码的快捷方式是ctrl+shift+F,如果大家想保存 java文件的时候 自动就格式化代码+消除不必 ...

  8. 安卓应用开发用户体验之禁止EditText自动获取焦点

    一.问题描述: 在安卓应用开发时,经常会在同一个页面有许多不同的控件,在用户操作时,如何正确的在这些控件之间来回切换是良好用户体验的重要问题.可能会碰到如下问题:在点击页面内某控件时(假设控件为Spi ...

  9. @JsonFormat 日期格式自动格式化

    通常日期格式都是以时间戳的形式存放在数据库里,当前端页面通过接口查询时,我们会将一个对象的某些属性查出来返回给页面. 例如,某个类里面有个属性 Timestamp create_time 给这个对象实 ...

随机推荐

  1. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  2. sourceTree 更新svn提示can't locate SVN/Core.pm

    装了sourceTree一直没有怎么用,今天试着用用,居然报错 can't locate SVN/Core.pm 详细报错如下: Can't locate SVN/Core.pm in @INC (y ...

  3. speechSynthesis

    /* $timeout.cancel(timer); */window.speechSynthesis.onvoiceschanged = function(e) { voices = speechS ...

  4. Hibernate原生SQL查询多表关联,SQL语句要注意的问题

    Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...

  5. Filco minila 的蛋疼。

    3494左shift坏了,期间邮寄厂家维修,就把尘封多年的minila拿出来用着. 最为人诟病的问题:蓝亚适配,与mac跟iphone都能快速的匹配连接上.但是对于我的dell vestro 2012 ...

  6. xmind的第五天笔记

  7. .vimrc常用

    vim 的環境設定參數   :set nu:set nonu 行号 :set tabstop=4 :set softtabstop=4 :set shiftwidth=4 tab :set hlsea ...

  8. codeforces mysterious present 最长上升子序列+倒序打印路径

    link:http://codeforces.com/problemset/problem/4/D #include <iostream> #include <cstdio> ...

  9. find查找命令的各种使用方法

    find是文件查找工具,实时查找,速度慢,精确匹配 find命令基本使用格式 find [options] [查找路径] [查找条件] [处理动作] 查找路径:默认为当前目录 查找条件:默认为查找指定 ...

  10. 在HTML标签<a/>中调用javascript代码

    <a/>标签的“href”属性可以是一个有效的URL,表示跳转的目的地,除此之外,href还可以是一段javascript代码.当为“href”设置javascript代码时,格式如下:& ...