EditText输入字符,每4个字符 加上3个空格作为 分割符

最近需求,在一个EditText需要做一个这样的效果:

EditText输入字符,每4个字符 加上3个空格作为 分割符_第1张图片

看到网上有中间隔一个空格的,单分隔效果不太明显,就加三个空格。

TextWatcher watcher=new TextWatcher() {
		StringBuilder sBuilder=new StringBuilder();
		int beforeChangeLength;
		int onTextChangeLength;
		boolean isChanged;
		int location = 0;// 记录光标的位置
		int spaceNumber = 0;
		char[] tempChar;
		int changedType=0;
		@Override
		public void onTextChanged(CharSequence s, int start, int before, int count) {
			onTextChangeLength=s.length();
			sBuilder.append(s.toString());//保存当前textView显示的内容
			if(onTextChangeLength==beforeChangeLength|| onTextChangeLength <= 3||isChanged){
				changedType=0;
				isChanged=false;
			}else if(onTextChangeLengthbeforeChangeLength){
				//当前改变长度比改变前长度 小,输入
				changedType=2;
				isChanged=true;
			}
		}
		
		@Override
		public void beforeTextChanged(CharSequence s, int start, int count, int after) {
			beforeChangeLength=s.length();
			if (sBuilder.length() > 0) {//清空sBuilder的缓存内容
				sBuilder.delete(0, sBuilder.length());
			}
			spaceNumber = 0;//计算当前textView的空格符号的数量
			int length=s.length();
			int max=(int) Math.ceil(length/4);//每4 个字符 加一个分隔符
			for(int i=1;i=i*(4+3)&&length<=(i*(4+3)+4)){//加三个空格
				    spaceNumber=i;
			        break;
				}
			}
//			if(length>=7&&length<=11){
//				spaceNumber=1;
//			}
//			if(length>=14&&length<=18){
//				spaceNumber=2;
//			}
//			if(length>=21&&length<=25){
//				spaceNumber=3;
//			}
		}
		@Override
		public void afterTextChanged(Editable s) {
			if(editText==null){
				return;
			}
			editText.removeTextChangedListener(this);
			if(isChanged){
				location = editText.getSelectionEnd();//计算当前光标位置
				int index = 0;//清除当前空格
				while (index < sBuilder.length()) {
					if (sBuilder.charAt(index) == ' ') {
						sBuilder.deleteCharAt(index);
					} else {
						index++;
					}
				}
				//textView内容改变之后,再重新计算下 需要添加空格的 位置
				index = 0;
				int spaceNum = 0;
				while (index < sBuilder.length()) {
					if ((index == 4 || index == 11 || index == 18)) {
						sBuilder.insert(index, textSpace);
						spaceNum++;
					}
					index++;
				}
					//计算添加空格后,重新计算下光标的位置,
					if (spaceNum > spaceNumber) {
						location += (spaceNum - spaceNumber)*3;
					}
				
				tempChar = new char[sBuilder.length()];
				sBuilder.getChars(0, sBuilder.length(), tempChar, 0);
				String str = sBuilder.toString();
				if(str != null){
					str = str.toUpperCase();
				}
				
				if (str.length() > 25){
					str = str.substring(0,25);
				}
				
				if (location > str.length()) {
					location = str.length();
				} else if (location < 0) {
					location = 0;
				}
				
				editText.setText(str);
				Editable etable = editText.getText();
				Selection.setSelection(etable, location);
				isChanged = false;
			}else{
				  String cardText= editText.getText().toString();
                  if(!TextUtils.isEmpty(cardText)){
                      int position=editText.getSelectionEnd();
                      cardText=cardText.toUpperCase();
                      editText.setText(cardText);
                      Editable etable = editText.getText();
                      Selection.setSelection(etable, position);
                  }
			}
			editText.addTextChangedListener(this);
		}
	};


 
 

你可能感兴趣的:(android-UI界面)