Android中EditText的字数的限制实现

先上代码:

import java.io.UnsupportedEncodingException;

import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;

/**
 * edittext监听器,用于限制字数,如果字数超过,则自动舍弃,并通过toast提示
 *
 * @author kyson
 *
 */
public class EditTextWatcher implements TextWatcher {

	private static final String TAG = "EditTextWatcher";

	private CharSequence temp;
	private int selectionStart;
	private int selectionEnd;
	// 字数限制
	private int range = 3;
	// 提示的信息
	private String infoString;
	private Activity mActivity;
	private EditText mEditText;

	// 构造函数
	public EditTextWatcher(Activity activity, EditText text) {
		super();

		this.mActivity = activity;
		this.mEditText = text;
	}

	// 设置toast提示信息
	public void setInfomation(String infoString, int range) {
		this.range = range;
		this.infoString = infoString;
	}

	public void onTextChanged(CharSequence s, int start, int before, int count) {
		// TODO Auto-generated method stub
		temp = s;
	}

	public void beforeTextChanged(CharSequence s, int start, int count, int after) {
		// TODO Auto-generated method stub
	}

	public void afterTextChanged(Editable s) {
		//for some reason , we should substract one
		int textLength = 0 ;
		try {
			//we should speciafy the encode ->gbk
			textLength = temp.toString().getBytes("gbk").length;
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		if ( textLength > range) {
			selectionStart = mEditText.getSelectionStart();
			selectionEnd = mEditText.getSelectionEnd();
			// Toast.makeText(EditTextWatcher.this.mActivity, infoString,
			// Toast.LENGTH_SHORT).show();
			ToastUtils.show(EditTextWatcher.this.mActivity, infoString);
			s.delete(selectionStart - 1, selectionEnd);
			int tempSelection = selectionStart - 1;
			Log.v(TAG, "输入的信息为:" + s + "infoString" + infoString + "range:" + range);
			mEditText.setText(s);
			mEditText.setSelection(tempSelection);
		}

	}

}
时间: 2024-11-09 00:11:41

Android中EditText的字数的限制实现的相关文章

Android中EditText显示明文与密文的两种方式

效果图   布局文件 <?xml version="1.0" encoding="utf-8"?> <!-- Android中EditText显示明文与密文的两种方式 --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/to

Android中EditText的inputType属性值

android中inputType属性在EditText输入值时启动的虚拟键盘的风格有着重要的作用.这也大大的方便的操作.有时需要虚拟键盘只为字符或只为数字.所以inputType尤为重要.<EditText android:layout_width="fill_parent" android:layout_height="wrap_content"android:inputType="text" /> //文本类型,多为大写.小写和

Android中TextView输入字数统计和限制

在Android开发应用的时候,文本编辑框中最多输入140个字,经常会显示还剩多少字以限制用户输入的字数, EditText content;//定义一个文本输入框 TextView hasnum;// 用来显示剩余字数 int num = 140;//限制的最大字数 content = (EditText) findViewById(R.id.et_content); hasnumTV = (TextView) findViewById(R.id.tv_num); hasnumTV.setTe

Android中Edittext的属性

//此为转载别人的,挺不错的 1.EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformationMethod()方法来实现隐藏密码或这显示密码. editText.setTransformationMethod(PasswordTransformationMethod.getInstance()

关于android中EditText自动获取焦点并弹出键盘的相关设置

在android开发中,关于EditText自动获取焦点弹出键盘,我们可能又是会有让键盘自动弹出的需求,有时可能又会有不想让键盘自动弹出的需求,下面是我所总结的两种方法: 需求:EditText自动获取焦点并弹出键盘,代码: EditText.setFocusable(true); EditText.setFocusableInTouchMode(true); EditText.requestFocus(); 需求:EditText不会自动获取焦点并且不会弹出键盘,代码:  将其父控件设置: P

Android中editText使用报错

在activity_main.xml文件中添加了editText控件 <EditText        android:id="@+id/edit_text"        android:hint="@the next" <!--用the next或者@the next都报错,要使用@string/the next,用标准写法在string.xml文件中配置键值对(name:the next   vlaue:下一步),注意键值对有未使用的也会报错--&

Android中EditText样式修改 聚焦光标、背景

在Android开发中,根据项目的需求,需要定制一些特殊的样式,例如:使用EditText时,聚焦时的背景及光标图片使用自定义而非android系统默认的.这两天,在项目中涉及此需求,现记录如下: 首先,说明灵感来自于http://bbs.csdn.net/topics/391491663中的评论,谢谢!另外,若想了解更多EditText属性,可参考:http://blog.csdn.net/qq_15128547/article/details/50947041 默认情况下: <EditTex

Android中EditText焦点问题

https://www.jianshu.com/p/3d31d681f4bc 问题:当EditText失去焦点时做内容校验 场景:用户编辑EditText将内容清空,当点击空白地方时关闭软键盘,同时校验EditText的内容,如果为空则设为"1". 问题远没有看着那么简单哦 第一步:添加焦点监听 view.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(

解决android中EditText导致的内存泄漏问题

开发中用到了LeankCanary,在一个简单的页面中(例如 :仅仅 包含Edittext),也会导致内训泄漏,为此,我在网上找了大量资料,最终解决.例如一个布局:<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:focusable="true"android:focusableInTouchMode=&qu