手机号码格式化显示自定义EditText控件
2018-02-02 16:47
531 查看
自定义EditText控件实现手机号码自动格式化显示,前3位数字后跟一个空格,之后每4位数字后加一个空格。
显示效果如下图所示:
使用方式如下所示:
1. xml中放置控件:
2. Activity中使用:
以下贴出控件源码:
显示效果如下图所示:
使用方式如下所示:
1. xml中放置控件:
<com.rzc.NumberFormatEditText android:id="@+id/testEditText" android:layout_width="200dp" android:layout_height="40dp" android:textSize="16dp"/>
2. Activity中使用:
final NumberFormatEditText testEditText = (NumberFormatEditText) findViewById(R.id.testEditText); testEditText.setText("13812345678"); findViewById(R.id.btTj).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { toast(testEditText.getRealNumber());//getRealNumber返回不带空格的真实号码 } });
以下贴出控件源码:
package com.rzc; import android.content.Context; import android.text.Editable; import android.text.InputType; import android.text.TextWatcher; import android.util.AttributeSet; import android.widget.EditText; /** * Created by rzc on 18/1/31. */ public class NumberFormatEditText extends EditText { private String mRealNumber; public NumberFormatEditText(Context context) { super(context); init(); } public NumberFormatEditText(Context context, AttributeSet attrs) { super(context, attrs); init(); } public String getRealNumber() { return mRealNumber; } private void init() { setInputType(InputType.TYPE_CLASS_NUMBER); addTextChangedListener(new TextWatcher() { private int mVaryType = 0; private static final int VARY_ADD_ONE = 1; private static final int VARY_CLEAR_ONE = 2; private int mSelection = 0; @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { if (count == 0 && after == 1) { mVaryType = VARY_ADD_ONE; mSelection = start + 1; } else if (count == 1 && after == 0) { mVaryType = VARY_CLEAR_ONE; mSelection = start; } else { mVaryType = 0; } } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { String currText = s.toString(); mRealNumber = currText.replaceAll("\\D", ""); String destText = getFormatStrByNumber(mRealNumber); if (!currText.equals(destText)) { if (destText == null) { setText(""); } else { int sel = destText.length(); if (mVaryType == VARY_ADD_ONE || mVaryType == VARY_CLEAR_ONE) { sel = mSelection; boolean nearBlank = false; if (sel == 4 || (sel > 4 && (sel - 4) % 5 == 0)) { nearBlank = true; } if (nearBlank) { if (mVaryType == VARY_ADD_ONE) { sel++; } else { sel--; } } if (sel > destText.length()) { sel = destText.length(); } } setText(destText); setSelection(sel); } } else { if (mVaryType == VARY_CLEAR_ONE) { int sel = mSelection; if (sel == 4 || (sel > 4 && (sel - 4) % 5 == 0)) { sel--; } if (sel > destText.length()) { sel = destText.length(); } setSelection(sel); } } } }); } private String getFormatStrByNumber(String realNumber) { String destText = null; if (realNumber == null) { return null; } if (realNumber.length() <= 3) { destText = realNumber; } else if (realNumber.length() <= 7) { destText = realNumber.substring(0, 3) + " " + realNumber.substring(3); } else { destText = realNumber.substring(0, 3); int len = 3; while (len < realNumber.length()) { int tail = len + 4; destText += " " + realNumber.substring(len, tail <= realNumber.length() ? tail : realNumber.length()); len += 4; } } return destText; } }
相关文章推荐
- php 银行卡号 手机号码 正则表达式格式化 每4位隔空格显示
- php 银行卡号 手机号码 正则表达式格式化 每4位隔空格显示
- 自定义数字格式化(包括是否千分符显示,小数保留位数)
- [jquery.validate]自定义方法实现"手机号码或者固定电话"的逻辑验证
- android 联系人从SIM卡导入的联系人号码是显示“其它”号码不是“手机或者电话”号码
- 手机号码,移动端显示问题
- PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
- PHP格式化手机号码中间加星号(1556****9694)
- android中EditText手机号码xxx xxxx xxxx分段显示
- 使用jquery.validate自定义方法实现"手机号码或者固话至少填写一个"的逻辑验证
- android自定义View实现图片上传进度显示(仿手机QQ上传效果)
- [android] 手机卫士接收打电话广播显示号码归属地
- ios客户端学习-iOS 识别文字中的手机号码高亮显示点击可拨打电话
- TTTAttributedLabel高亮显示手机号码、网址
- 在vim中把手机号码格式化
- Android编写简单的手机通讯录,只是存到数据库里面,并没有显示出来,下次更新显示到自定义适配器的通讯录(这个只是教大家SQLite数据库如何使用)
- Android-->自定义模版EditText(多用于手机号码,银行卡号等输入)
- PHP利用正则表达式实现手机号码中间4位用星号(*)替换显示功能
- FAQ12644]联系人接收短彩信时不读,手机重启后,通知栏中该条未读消息显示为号码,不显示已保存的联系人名称
- php 手机号码格式化输出