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

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

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

在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。

时间: 2024-08-09 22:02:17

EditText限制输入字符类型的几种方式的相关文章

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显示明文与密文的两种方式

效果图   布局文件 <?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限制输入字符的5种实现方式

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

EditText限制输入字符的类型

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

Python判断输入字符类型

1 """从键盘上输入 一个字符,判断其字符类型.""" 2 while True: 3 char = input("请输入需要判断的字符:") 4 if str.isdigit(char) == True: 5 print("该字符为数字") 6 try: 7 char = int(char) 8 print("并且该数值类型为int") 9 except: 10 pass 11 12

SpringMVC配置字符过滤器的两种方式

有时候使用SpringMVC框架提交表单时会出现中文乱码,以下是我亲自试验过的配置字符过滤器的两种: 1.在web.xml中配置 <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>orgspringframeworkwebfilterCharacterEncodingFilter</filter-class> <init-param> &

php判断输入字符类型

<?function checkStr($str){ $output=''; $a=ereg('['.chr(0xa1).'-'.chr(0xff).']', $str); $b=ereg('[0-9]', $str); $c=ereg('[a-zA-Z]', $str); if($a && $b && $c){ $output='汉字数字英文的混合字符串';} elseif($a && $b && !$c){ $output='汉字数

Entity Framework(EF) Code First将实体中的string属性映射成text类型的几种方式

1.通过ColumnType属性设置 [Column(TypeName="text")] public string Text { get; set; } 在进行以上属性设置时,请首先引入命名空间:System.ComponentModel.DataAnnotations.Schema 2.通过StringLength属性设置 [StringLength(4010)] public string Text { get; set; } 3.通过Fluent API配置设置  modelB

让EditText只能输入数字的小技巧

准确的说让Edittext只能输入数字有方法两种,都是通过xml属性设置 方法一: <EditText android:id="@+id/u_account" android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginLeft="13dp" android:inputType="phone|numbe