博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
EditText输入4位数,自动空格
阅读量:6681 次
发布时间:2019-06-25

本文共 2314 字,大约阅读时间需要 7 分钟。

hot3.png

import android.content.Context;import android.text.Editable;import android.text.TextWatcher;import android.util.AttributeSet;import android.widget.EditText;/** * 在间隔处加一个标识符 *  * @author wzw * */public class IntervalAddTagEditText extends EditText{		/**	 * 位数	 */	private int unit = 4;	/**	 * 标识符	 */	private String tag = " ";	public IntervalAddTagEditText(Context context) {		super(context);		init();	}		public IntervalAddTagEditText(Context context, AttributeSet attrs) {		super(context, attrs);		init();	}		void init(){		addTextChangedListener(new FormatTextWatcher());	}		class FormatTextWatcher implements TextWatcher{				int beforeTextLength = 0;		int afterTextLength = 0;		int location = 0;// 记录光标的位置		boolean isChanging = false;// 是否更换中				@Override		public void beforeTextChanged(CharSequence s, int start, int count, int after) {			beforeTextLength = s.length();		}				@Override		public void onTextChanged(CharSequence s, int start, int before, int count) {		}				@Override		public void afterTextChanged(Editable s) {			afterTextLength = s.length();						if(isChanging)				return;						if(beforeTextLength < afterTextLength){// 字符增加				location = getSelectionEnd();				setFormatText(s.toString());				if(location % (unit+1) == 0){					setSelection(getLocation(location+1));				}else{					setSelection(getLocation(location));				}								}else if(beforeTextLength > afterTextLength){// 字符减少				location = getSelectionEnd();				setFormatText(s.toString());				if(location % (unit+1) == 0){					setSelection(getLocation(location-1));				}else{					setSelection(getLocation(location));				}			}		}				private int getLocation(int location){			if(location<0)				return 0;			if(location>afterTextLength){				return afterTextLength;			}			return location;		}				private void setFormatText(String str){			isChanging = true;			setText(addTag(str));			isChanging = false; 		}				/**		 * 加上标识符		 * @param str		 * @return		 */		private String addTag(String str){			str = replaceTag(str);			StringBuilder sb = new StringBuilder();			int index = 0;			int strLength = str.length();			while (index < strLength) {	            int increment = index+unit;	            sb.append(str.subSequence(index, index=(increment>strLength)?strLength:increment));	            if(increment

转载于:https://my.oschina.net/u/1175007/blog/605886

你可能感兴趣的文章
Chrome 浏览器 Javascript 调试参考
查看>>
VueRouter基础
查看>>
Spring之旅 - 3.0、3.1、4.0导引
查看>>
聊聊我理解的ANSI C、ISO C、GNU C、POSIX C
查看>>
Django新增models和表的方法
查看>>
微信小程序入坑记录篇
查看>>
vue2.0学习笔记(第九讲)(vue-router实现路由)
查看>>
AppleScript脚本入门
查看>>
Windows环境下Jekyll+Github搭建个人博客
查看>>
windows下安装Logstash
查看>>
Hystrix使用
查看>>
最常用的正则表达式
查看>>
《啊哈!算法》-第 2 章:栈、队列、链表
查看>>
闲话JavaScript数据类型
查看>>
Facebook--Graphql 为什么功能这么强大?与开源数据库的结合分析
查看>>
用 ClojureScript 语法运行 React
查看>>
手摸手,带你用vue撸后台 系列四(vueAdmin 一个极简的后台基础模板)
查看>>
Composer的Autoload源码实现——注册与运行
查看>>
Android 自定义 View - 收藏集 - 掘金
查看>>
Restful API 的设计规范
查看>>