笔记 -- 11-- 完美实现手机号344格式化效果
2018-03-08 18:00
381 查看
一、前言:
在展示手机号码的时候,会遇到手机号按照344格式效果,这种效果的实现遇到过两次了,也踩过了许多的坑,在这里记录一下一个完美实现这种效果的方式。输入、插入、删除等光标位置停留比较好的交互效果。二、效果:
待插入三、代码实现:
public class ZpPhoneEditText extends AppCompatEditText implements TextWatcher { // 特殊下标位置 private static final int PHONE_INDEX_3 = 3; private static final int PHONE_INDEX_4 = 4; private static final int PHONE_INDEX_8 = 8; private static final int PHONE_INDEX_9 = 9; public ZpPhoneEditText(Context context) { super(context); } public ZpPhoneEditText(Context context, AttributeSet attrs) { super(context, attrs); } public ZpPhoneEditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { super.onTextChanged(s, start, before, count); if (s == null || s.length() == 0) { return; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); i++) { if (i != PHONE_INDEX_3 && i != PHONE_INDEX_8 && s.charAt(i) == ' ') { continue; } else { sb.append(s.charAt(i)); if ((sb.length() == PHONE_INDEX_4 || sb.length() == PHONE_INDEX_9) && sb.charAt(sb.length() - 1) != ' ') { sb.insert(sb.length() - 1, ' '); } } } if (!sb.toString().equals(s.toString())) { int index = start + 1; if (sb.charAt(start) == ' ') { if (before == 0) { index++; } else { index--; } } else { if (before == 1) { index--; } } setText(sb.toString()); setSelection(index); } } @Override public void afterTextChanged(Editable s) { } // 获得不包含空格的手机号 public String getPhoneText() { String str = getText().toString(); return replaceBlank(str); } private String replaceBlank(String str) { String dest = ""; if (str != null) { Pattern p = Pattern.compile("\\s*|\t|\r|\n"); Matcher m = p.matcher(str); if (m.find()) { dest = m.replaceAll(""); } } return dest; } }布局XML
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <com.example.zpdemo.widget.ZpPhoneEditText android:id="@+id/et_phone" android:layout_width="300dp" android:layout_height="wrap_content" android:hint="格式化手机号344" android:inputType="phone" android:maxLength="13"/> <Button android:id="@+id/btn_phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="20dp" android:textColor="#f00" android:textSize="16sp" android:text="获得手机号"/> </LinearLayout>应用private ZpPhoneEditText etPhone;
private Button btnPhone;
private void initView() {
etPhone = (ZpPhoneEditText) findViewById(R.id.et_phone);
btnPhone = (Button) findViewById(R.id.btn_phone);
btnPhone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btnPhone.setText(etPhone.getPhoneText());
}
});
}效果杠杠的,代码比较完整,亲自尝试一下比较好。。。
相关文章推荐
- 【Cocos2d-x游戏引擎开发笔记(11)】粒子系统----实现下雪效果
- 【Cocos2d-x游戏引擎开发笔记(11)】粒子系统----实现下雪效果
- 【Cocos2d-x游戏引擎开发笔记(11)】粒子系统----实现下雪效果
- 【Cocos2d-x游戏引擎开发笔记(11)】粒子系统----实现下雪效果
- 手机号码格式化;实现手机号344格式输入:000 0000 0000
- 【Cocos2d-x游戏引擎开发笔记(11)】粒子系统----实现下雪效果
- 【Cocos2d-x游戏引擎开发笔记(11)】粒子系统----实现下雪效果
- 【代码笔记】翻页效果的实现
- Android控件笔记——使用TextView实现跑马灯效果
- js实现填写身份证号、手机号、准考证号等信息自动空格的效果
- Android安卓用Dialog对话框简单并且完美实现popupWindow底部弹出效果,有动画效果
- iPhone开发学习笔记通过UIView实现动画效果
- Android RecycleView实现不同样式Item样式效果完美解决
- js实现完美拖拽效果可拖动层与回放拖动规迹并显示拖动距离参数
- 遇到jQuery中toggle()与checkbox的冲突,使用其他方法实现同样的效果(工作笔记)
- JQuery学习笔记 实现图片翻转效果和TAB标签切换效果第1/2页
- Android笔记---使用ViewFlipper组件实现文本上下滑动效果
- RecylerView完美实现瀑布流效果
- 数据结构与算法分析笔记与总结(java实现)--排序11:有序矩阵查找练习题
- [置顶] 一行代码完美实现Android沉浸式效果