android edittext在输入手机号码的时候自动添加分隔符
来源:互联网 发布:炸金花棋牌游戏源码 编辑:程序博客网 时间:2024/05/23 10:12
在输入框输入手机号码,例如13800138000,变成3-4-4的格式
当输入138后面的0的时候,自动添加一个"-",变成138-0的格式;
当输入到138-0013后面的8的时候,自动变成138-0013-8000的格式。
在网上看到有人提出该问题,在此我就给出解答:
<EditText android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:inputType="phone" android:digits="1234567890-"/>
package com.example.edittest;import android.app.Activity;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.view.Menu;import android.widget.EditText;public class MainActivity extends Activity implements TextWatcher {private static final String TAG = "MainActivity";private static final char SEPARATOR = '-';private static final int FIRST_SEPARATOR_POSITION = 3;private static final int SECOND_SEPARATOR_POSITION = 7;private EditText mPhoneNumberET;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mPhoneNumberET = (EditText) findViewById(R.id.edit);mPhoneNumberET.addTextChangedListener(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void afterTextChanged(Editable aEditable) {Log.d(TAG, "afterTextChanged: " + aEditable.toString());}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {Log.d(TAG, "beforeTextChanged: " + s + ", " + start + ", " + after + ", " + count);}@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {Log.d(TAG, "onTextChanged: " + s + ", " + start + ", " + before + ", " + count);Editable phoneNumberEditable = mPhoneNumberET.getEditableText();if (before == 1) {if ((start == FIRST_SEPARATOR_POSITION) || (start == (SECOND_SEPARATOR_POSITION + 1))) {return;}}switch (parsePhoneNumber(phoneNumberEditable.toString())) {case 1:int oneInvalidSeparatorIndex = getOneInvalidSeparatorIndex(phoneNumberEditable.toString());phoneNumberEditable.delete(oneInvalidSeparatorIndex, oneInvalidSeparatorIndex + 1);//删除该“-”break;case 2:phoneNumberEditable.insert(FIRST_SEPARATOR_POSITION, String.valueOf(SEPARATOR));break;case 3:phoneNumberEditable.insert(SECOND_SEPARATOR_POSITION + 1, String.valueOf(SEPARATOR));break;case 4:phoneNumberEditable.delete(phoneNumberEditable.length() - 1, phoneNumberEditable.length());break;case -1:case 0:default:break;}}/* * -1. Invalid. * * 0. Formatted. * * 1. Not formatted cause one index at least is a separator, except index 3 * and index 7. * * 2. Not formatted cause index 3 isn't a separator. * * 3. Not formatted cause index 7 isn't a separator. * * 4. Not formatted cause has a separator in the tail. */private int parsePhoneNumber(String phoneNumber) {if (phoneNumber == null) {return -1;}if (getOneInvalidSeparatorIndex(phoneNumber) != -1) {//除index = 3和8是“-”以外,其他位置有“-”时,按1处理return 1;}if ((phoneNumber.length() > FIRST_SEPARATOR_POSITION)//字符数超3个,同时index=3的字符不是“-”,则按2来处理&& (phoneNumber.charAt(FIRST_SEPARATOR_POSITION) != SEPARATOR)) {return 2;}if ((phoneNumber.length() > (SECOND_SEPARATOR_POSITION + 1))//字符数超8个,同时index=8的字符不是“-”,则按3来处理&& (phoneNumber.charAt(SECOND_SEPARATOR_POSITION + 1) != SEPARATOR)) {return 3;}//if ((phoneNumber.length() == (FIRST_SEPARATOR_POSITION + 1))//|| (phoneNumber.length() == (SECOND_SEPARATOR_POSITION + 1 + 1))) {//return 4;//}if(phoneNumber.length()>13)//超过长度,按4处理{return 4;}return 0;}/** * 除index = 3和8是“-”以外,其他位置有“-”时,返回该index * @param phoneNumber * @return */private int getOneInvalidSeparatorIndex(String phoneNumber) {if (phoneNumber == null) {return -1;}for (int index = 0; index < phoneNumber.length(); index++) {if ((index == FIRST_SEPARATOR_POSITION) || (index == (SECOND_SEPARATOR_POSITION + 1))) {continue;}if (phoneNumber.charAt(index) == SEPARATOR) {return index;}}return -1;}}
0 0
- android edittext在输入手机号码的时候自动添加分隔符
- 自动添加分隔符的EditText
- Android自定义EditText实现手机号码和银行卡号自动分隔
- android EditText在输入的时候输入框上方出现悬浮文字提示
- android edittext 输入手机号码格式变化
- Android 带分隔符的EditText
- XEditText:带删除功能的EditText;可设置自动添加分隔符分割电话号码、银行卡号等;支持禁止Emoji表情符号输入;自定义右边显示图标作功能选项;仿iOS输入框风格
- Android EditText 输入回车符自动跳转至下一个EditText
- 如何自定义mapreduce在输出的key和value之间自动添加的分隔符
- android 自动输入完成提示 自定义适配器适用于自定义分隔符带中文的提示
- android 类似银行卡可设置分隔符的 EditText
- android中具有分隔功能的edittext
- 如何去掉mapreduce自动添加的分隔符
- EditText设置输入的类型,只能输入纯数字,只能输入手机号码,只能输入邮箱等等。
- EditText 在设置为输入密码的时候 密码是否可见 光标在最后显示
- 安卓设置EditText的输入框不自动弹出以及设置EditTEXT在输入法上方
- Winform在安装布署的时候添加注册表自动启动
- 【Android】EditText输入框自动提示
- 日期函数
- AMD OpenCL例子阅读笔记系列之DeviceFission
- jquery 中跳出each循环
- .NET 数据类型之动态类型(Dynamic)
- unity3d加密资源并缓存加载
- android edittext在输入手机号码的时候自动添加分隔符
- android中的style部分属性值介绍
- Android—UI之DatePicker、TimePicker
- LCD LVDS的一些术语定义
- IOS6新特性之下拉刷新<UIRefreshControl>
- 日本研制出用于电动汽车的锂电池高耐热技术
- C# 中的委托和事件
- Coder-Strike 2014 - Finals (online edition, Div. 1)
- C# List的使用