文档章节

Android EditText 分割文字输入

NO_Four
 NO_Four
发布于 2016/01/18 19:15
字数 269
阅读 201
收藏 5

先上效果:

不多说,代码如下:

package com.example.testedit;

import android.content.Context;
import android.graphics.Canvas;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.widget.EditText;

public class DivisionEditText extends EditText {

	private char separate= ' ';
	private int groupLength = 4;
	public DivisionEditText(Context context) {
		super(context);
		setup();
	}
	
	public DivisionEditText(Context context, AttributeSet attrs) {
		super(context, attrs);
		setup();
	}
	
	public DivisionEditText(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		setup();
	}
	
	private void setup(){
		this.addTextChangedListener(new TextWatcher() {
			
			@Override
			public void onTextChanged(CharSequence s, int start, int before, int count) {
				System.out.println(s);
				Editable e = DivisionEditText.this.getEditableText();
				
				int oldLength = e.toString().length();
				int oldsection = oldLength/groupLength;
				boolean isNeedContinue = false;
				for(int i = 1; i <= oldsection; i++){
					if((groupLength+1)*i - 1 < oldLength){
						if(e.charAt((groupLength+1)*i - 1) != separate){
							isNeedContinue = true;
							break;
						}
					}
				}
				if(isNeedContinue){
					StringBuilder sb =new StringBuilder();
					/*sb.append(e.toString());
					for(int i = 0; i < sb.toString().length(); i++){
						if(sb.charAt(i) == separate){
							sb.delete(i, i+1);
							i--;
						}
					}*/
					//换更简洁的代码
					String temp = e.toString().replaceAll(String.valueOf(separate), "");
					sb.append(temp);
					int newLength = sb.length();
					int section = newLength/groupLength;
					System.out.println(section + "   " + sb.toString());
					for(int i = 1; i <= section; i++){
						if((groupLength+1)*i - 1 < sb.length()){
							sb.insert((groupLength+1)*i - 1, separate);
						}
					}
					System.out.println("sb - "+sb.toString());
					e.replace(0, e.toString().length(), sb);
					System.out.println(e.toString());
				}
				
			}
			
			@Override
			public void beforeTextChanged(CharSequence s, int start, int count,
					int after) {
			}
			
			@Override
			public void afterTextChanged(Editable s) {
				
			}
		});
	}
	
	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		
	}

	

	public char getSeparate() {
		return separate;
	}

	public void setSeparate(char separate) {
		this.separate = separate;
	}

	public int getGroupLength() {
		return groupLength;
	}

	public void setGroupLength(int groupLength) {
		this.groupLength = groupLength;
	}
	
	

}


© 著作权归作者所有

NO_Four
粉丝 2
博文 21
码字总数 7167
作品 0
深圳
高级程序员
私信 提问
Android开发之EditText属性详解

1、EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformation...

的书法上的
2014/07/28
0
0
EditText的一些常用功能的介绍

一:新建HelloEditText工程 新建一个Hello world详细步骤可以参见 Android教程之三:第一个Android应用,HelloWorld 创建设置如下: Project name: HelloEditText Build Target :android 2....

yuwentao
2012/04/19
0
0
Android软件开发之EditText 详解(八)

Android软件开发之EditText 详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6629450 EditText在API中的结构 java...

彭博
2012/03/09
165
0
如何在EditText中显示提示文字

在EditText内部显示提示文字,这部分被锁,不可删除或修改,文字在后面输入。 1.一般可透过android:drawableLeft属性来实现。首先做一个带有提示文字的图片,即提示文字当作图片来显示,透过...

一别经年
2013/12/24
0
9
Android软件开发之EditText 详解(八)

Android软件开发之EditText 详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/details/6629450 EditText在API中的结构 java...

晨曦之光
2012/03/07
4.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

Java编程学习-Java虚拟机(JVM)以及跨平台原理

相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的。 那么,跨平台是怎样实现的呢?这...

Java领航员
30分钟前
0
0
学JFinal不迷路,JFinal优质资源列表(欢迎反馈更新)

学JFinal不迷路,记录一下JFinal相关的资源、产品、讲师等信息(所有信息排名不分先后)。 一、相关站点: 1、JFinal官网-问答、分享、文档、交流、俱乐部 http://www.jfinal.com 2 、JFina...

山东-小木
33分钟前
1
0
项目学习(2)-order-job

在当前的系统中,因为并发量并不高,服务之间发起异步请求或者异步调用时,没有使用到消息中间件。 而是在各个服务(子系统)的数据库中,创建了event_queue事件对列表和event_handler事件处...

太猪-YJ
42分钟前
1
0
gradle grovvy中的闭包

1. 无参数的闭包 //这b1就是一个闭包def b1={ println "hello b1"}//定义方法,包含闭包类型的参数def method1(Closure closure){closure()}//执行method1method1(b1) 执行结果 ...

edison_kwok
今天
3
0
基于Spring Boot + Dubbo的全链路日志追踪(一)

一、 概要 当前公司后端整体架构为:Spring Boot + Dubbo。由于早期项目进度等原因,对日志这块没有统一的规范,基本上是每个项目自己管自己的日志。这也对后面的问题排查带来了很大的困难,...

明天以后
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部