EditText 自动格式化电话电话号码
需要格式化的格式为: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 自动格式化电话电话号码的更多相关文章
- Android开发---基本UI组件1:自动拨电话,自动上网,输入框不换行、只输数字、只输文本、只输密码
1.activity_main.xml 描述:构建一个按钮 <?xml version="1.0" encoding="utf-8"?> <L ...
- Cleave.js – 自动格式化表单输入框的文本内容
Cleave.js 有一个简单的目的:帮助你自动格式输入的文本内容. 这个想法是提供一个简单的方法来格式化您的输入数据以增加输入字段的可读性.通过使用这个库,您不需要编写任何正则表达式来控制输入文本的 ...
- Eclipse保存文件时自动格式化代码
实现效果:Ctrl+S会自动格式化并保存代码. 应用上图所示效果之后,在每次对Eclipse保存的时候都会实现自动格式化代码. 1. Fomated All lines,格式化该文件的所有代码:还是 ...
- 关于eclispe保存代码自动格式化的设置
最近在项目开发,上级要求所有开发人员,代码必须格式和(Ctrl+Shift+F),但是还是会偶尔忘记格式化,今天看了有一种保存之后eclipse可以自动格式代码的设置 1.请大家在eclipse设置下 ...
- visual studio粘贴html代码.会自行添加一些未知代码(自动格式化)
比如我们要粘贴这样一段代码到VS这里 <option {if empty($param.is_active)}selected=selected{/if}>请选择</option&g ...
- Eclipse中对Python代码自动格式化!
在Eclipse中使用PyDev发现无法进行代码格式化,使用通常的"Ctrl+Shift+F"快捷键,没有任何变化,难道不能对python代码格式化了吗? 通过下面设置,就可以每次 ...
- JAVA_eclipse 保留Java文件时自动格式化代码和优化Import
Eclipse 保存Java文件时自动格式化代码和优化Import Eclipse中format代码的快捷方式是ctrl+shift+F,如果大家想保存 java文件的时候 自动就格式化代码+消除不必 ...
- 安卓应用开发用户体验之禁止EditText自动获取焦点
一.问题描述: 在安卓应用开发时,经常会在同一个页面有许多不同的控件,在用户操作时,如何正确的在这些控件之间来回切换是良好用户体验的重要问题.可能会碰到如下问题:在点击页面内某控件时(假设控件为Spi ...
- @JsonFormat 日期格式自动格式化
通常日期格式都是以时间戳的形式存放在数据库里,当前端页面通过接口查询时,我们会将一个对象的某些属性查出来返回给页面. 例如,某个类里面有个属性 Timestamp create_time 给这个对象实 ...
随机推荐
- Java:多线程<二> 同步
由于多线程的访问出现延迟和线程的随机性,在使用多线程时往往会伴随安全性的问题,这些问题一旦出现将会是非常严重的.为了解决这种安全性问题,synchronized出现了. synchronized用法一 ...
- java发送 get请求
package com.java.base; import java.io.BufferedReader; import java.io.InputStreamReader; import java. ...
- 1、Android Bitmap详细介绍
import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io ...
- ASP.NET Cookie存值问题
想必 用Cookie存值已经是很普遍的了,我也是刚学习了一点皮毛,现在就记下一点知识,便于日后翻阅. 1.C#代码存取Cookie值 //用Request获取到客户端Cookie 判断是否为空 if ...
- 安装生物信息学软件-Samtools
装完Bowtie2,官方文档给出的栗子说可以玩一玩samtools,所以我入个坑 参考这篇http://m.010lm.com/roll/2016/0620/2343389.html Step 1: ...
- Android使用文件存储数据
Android上最基本的存储数据的方式即为使用文件存储数据,使用基本的Java的FileOutStream,BufferedWriter,FileInputStream和BufferedReader即 ...
- 国产AR SDK介绍
说到VR,大家都知道虚拟现实有多火.可是VR之后呢,还有AR.相较于VR,AR的应用意义更加的强大. 相信在不久的将来AR和VR将会融为一体,把现实世界的数据信息完全联通在我们的眼前.这其中的领头羊莫 ...
- solr异常解决
使用solr1.4跟solr3.1时,配置了个唯一id类型是sint 或者int,启动时在tomcat后台就会抛出这个异常: org.apache.solr.common.SolrException: ...
- 修改crontab默认的编辑器
1.crontab默认的编辑器为nano; 2.修改为vi或其他编辑器 export EDITOR="/usr/bin/vim" ; crontab -e
- 转 C# DataTable 和List之间相互转换的方法
一.List/IEnumerable转换到DataTable/DataView 方法一: /// <summary> /// Convert a List{T} to a DataTabl ...