EditText限制输入字符的类型

?       最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下:

1、第一种方式是通过EditText的inputType来实现,可以通过xml或者java文件来设置。假如我要设置为显示密码的形式,可以像下面这样设置:

在xml中,   android:inputType="textPassword"

在java文件中,可以用 myEditText.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

当然,还有更多的其他属性用来进行输入设置。

2、第二种是通过android:digits 属性来设置,这种方式可以指出要显示的字符,比如我要限制只显示数字,可以这样:

android:digits="0123456789"

如果要显示的内容比较多,就比较麻烦了,将要显示的内容依次写在里面。

3、通过正则表达式来判断。下面的例子只允许显示字母、数字和汉字。

public static String stringFilter(String str)throws PatternSyntaxException{

//
只允许字母、数字和汉字

String   regEx  =  "[^a-zA-Z0-9\u4E00-\u9FA5]";

Pattern   p   =   Pattern.compile(regEx);

Matcher   m   =   p.matcher(str);

return   m.replaceAll("").trim();

}

然后需要在TextWatcher的onTextChanged()中调用这个函数,

@Override

public
void onTextChanged(CharSequence ss, int start, int before, int count) {

String
editable = editText.getText().toString();

String
str = stringFilter(editable.toString());

if(!editable.equals(str)){

editText.setText(str);

//设置新的光标所在位置

editText.setSelection(str.length());

}

}

4、通过InputFilter来实现。

实现InputFilter过滤器,需要覆盖一个叫filter的方法。

public abstract CharSequence filter (

CharSequence source,  //输入的文字

int start,  //开始位置

int end,  //结束位置

Spanned dest, //当前显示的内容

int dstart,  //当前开始位置

int dend //当前结束位置

);

下面的实现使得EditText只接收字符(数字、字母和汉字)和“-”“_”,Character.isLetterOrDigit会把中文也当做Letter。

editText.setFilters(new InputFilter[] {

new InputFilter() {

public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
int dend) {

for (int i = start; i < end; i++) {

if ( !Character.isLetterOrDigit(source.charAt(i)) && !Character.toString(source.charAt(i)) .equals("_") && !Character.toString(source.charAt(i)) .equals("-"))
{

return "";

}

}

return null;

}  });

另外使用InputFilter还能限制输入的字符,如

EditText tv =newEditText(this);

int maxLength =10;

InputFilter[] fArray =new InputFilter[1];

fArray[0]=new  InputFilter.LengthFilter(maxLength);

tv.setFilters(fArray);

上面的代码可以限制输入的字符数最大为10。

时间: 2025-01-02 15:10:28

EditText限制输入字符的类型的相关文章

EditText限制输入字符类型的几种方式

?       近期的项目上须要限制EditText输入字符的类型,就把能够实现这个功能的方法整理了一下: 1.第一种方式是通过EditText的inputType来实现,能够通过xml或者java文件来设置.假如我要设置为显示password的形式,能够像以下这样设置: 在xml中.   android:inputType="textPassword" 在java文件里,能够用 myEditText.setInputType(InputType.TYPE_TEXT_VARIATION

android 中如何限制 EditText 最大输入字符数

方法一: 在 xml 文件中设置文本编辑框属性作字符数限制 如:android:maxLength="10" 即限制最大输入字符个数为10 方法二: 在代码中使用InputFilter 进行过滤 //editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); 即限定最大输入字符数为20 [java] view plaincopy public class TextEditActivity exten

(转)Android EditText限制输入字符的5种实现方式

最近项目要求限制密码输入的字符类型, 例如不能输入中文.   现在总结一下EditText的各种实现方式,  以比较各种方法的优劣. 第一种方式:  设置EditText的inputType属性,可以通过xml或者java文件来设置.假如我要设置为显示密码的形式,可以像下面这样设置: 在xml中,   android:inputType="textPassword" 在java文件中,可以用 ev.setInputType(InputType.TYPE_TEXT_VARIATION_P

Android EditText 限制输入为ip类型

editText.setInputType(InputType.TYPE_CLASS_NUMBER); String digits = "0123456789."; editText.setKeyListener(DigitsKeyListener.getInstance(digits)); setInputType 要优先于 digits ,不然digits的限制会被setInputType 覆盖 原文地址:https://www.cnblogs.com/H-BolinBlog/p/

Linux工具开发[02]---编程实现对输入字符序列变换(编码/加密/散列)方式的智能判定

怎样简单实现一个能够智能判定输入字符序列变换方式的小程序 本文由CSDN-蚍蜉撼青松 [主页:http://blog.csdn.net/howeverpf]原创,转载请注明出处! 问题描写叙述: 在分析网络数据包或者研究安全问题时.经常会遇到变换后的字符序列.而是否能准确识别密文的变换算法,对进一步的分析工作非常关键. 经常使用的变换算法包含但不限于:Base64.URL编码.HTML编码.MD5散列.DES加密.RSA加密等. 要求: 1)在理解算法原理及密文特点的基础上.使用随意编程语言实现

Linux工具开发---2编程实现对输入字符序列变换(编码/加密/散列)方式的智能判定

如何简单实现一个可以智能判定输入字符序列变换方式的小程序 本文由CSDN-蚍蜉撼青松 [主页:http://blog.csdn.net/howeverpf]原创,转载请注明出处! 问题描述: 在分析网络数据包或者研究安全问题时,经常会遇到变换后的字符序列.而能否准确识别密文的变换算法,对进一步的分析工作很关键.常用的变换算法包括但不限于:Base64.URL编码.HTML编码.MD5散列.DES加密.RSA加密等.要求: 1)在理解算法原理及密文特点的基础上,使用任意编程语言实现,当输入一段密文

Android EditText的输入监听,输入字符的动态获取

http://itindex.net/detail/38974-android-edittext-%E7%9B%91%E5%90%AC 有时候我们可能会用到时时的监听EditText输入字符的时时监听,监听字符的个数,做一些正则表达式的处理等.如下方法可以实现: 我做的是时时的把EditeText输入的数据同步到TextView上 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android&

自定义EditText动态控制输入的字符数量

在开发中难免会遇到要控制字符数量的输入限制,比如用户的名字会让你输入10个字符(意思是英文可以输入10个但是汉字只可以输入5个),也许第一反应会在xml中设置EditText的长度,这种情况肯定是达不到我们的要求的.下面介绍一下自己的方法. 1.声明一个类继承InputFilter,实现filter中的方法,下面有详细的注解读者可以仔细看下 public class MyLenghtFilter implements InputFilter { int nMax=0; int keep=0; p

自定义控件--史上最简单!EditText多行输入并控制最大输入字符,显示剩余输入字符

转载请注明出处,谢谢~~ 昨天我在网上查看一些关于EditText的控制输入字符的问题.总结了一下有这么几种: 1.通过监听器TextWatcher监听字符数,然后通过弹出窗口阻断输入. 2.通过给EditText设置InputFilter.LengthFilter,来实现最大输入字符,阻断输入. 3.通过TextWather实现控制最大输入. 然后我看了看他们的实现,然后的然后,我放弃了.我不喜欢这种方式,并不是这种方式不可以.因为他们或有限制,或代码麻烦,我崇尚自由(我在装X,发现了没,哈哈