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

转载 2015年11月20日 10:09:41

方法一:

在 xml 文件中设置文本编辑框属性作字符数限制

如:android:maxLength="10" 即限制最大输入字符个数为10


方法二:

在代码中使用InputFilter 进行过滤

//editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)}); 即限定最大输入字符数为20

  1. public class TextEditActivity extends Activity {  
  2.     /** Called when the activity is first created. */  
  3.     @Override  
  4.     public void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.main);  
  7.           
  8.         EditText editText = (EditText)findViewById(R.id.entry);  
  9.         editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(20)});  
  10.     }  
  11. }  

方法三:

利用 TextWatcher 进行监听

  1. package cie.textEdit;  
  2.   
  3. import android.text.Editable;  
  4. import android.text.Selection;  
  5. import android.text.TextWatcher;  
  6. import android.widget.EditText;  
  7.   
  8. /* 
  9.  * 监听输入内容是否超出最大长度,并设置光标位置 
  10.  * */  
  11. public class MaxLengthWatcher implements TextWatcher {  
  12.   
  13.     private int maxLen = 0;  
  14.     private EditText editText = null;  
  15.       
  16.       
  17.     public MaxLengthWatcher(int maxLen, EditText editText) {  
  18.         this.maxLen = maxLen;  
  19.         this.editText = editText;  
  20.     }  
  21.   
  22.     public void afterTextChanged(Editable arg0) {  
  23.         // TODO Auto-generated method stub  
  24.           
  25.     }  
  26.   
  27.     public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,  
  28.             int arg3) {  
  29.         // TODO Auto-generated method stub  
  30.           
  31.     }  
  32.   
  33.     public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {  
  34.         // TODO Auto-generated method stub  
  35.         Editable editable = editText.getText();  
  36.         int len = editable.length();  
  37.           
  38.         if(len > maxLen)  
  39.         {  
  40.             int selEndIndex = Selection.getSelectionEnd(editable);  
  41.             String str = editable.toString();  
  42.             //截取新字符串  
  43.             String newStr = str.substring(0,maxLen);  
  44.             editText.setText(newStr);  
  45.             editable = editText.getText();  
  46.               
  47.             //新字符串的长度  
  48.             int newLen = editable.length();  
  49.             //旧光标位置超过字符串长度  
  50.             if(selEndIndex > newLen)  
  51.             {  
  52.                 selEndIndex = editable.length();  
  53.             }  
  54.             //设置新光标所在的位置  
  55.             Selection.setSelection(editable, selEndIndex);  
  56.               
  57.         }  
  58.     }  
  59.   
  60. }  

对应的 activity 部分的调用为:
  1. package cie.textEdit;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.text.InputFilter;  
  6. import android.widget.EditText;  
  7.   
  8. public class TextEditActivity extends Activity {  
  9.     /** Called when the activity is first created. */  
  10.     @Override  
  11.     public void onCreate(Bundle savedInstanceState) {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.main);  
  14.   
  15.         EditText editText = (EditText) findViewById(R.id.entry);  
  16.         editText.addTextChangedListener(new MaxLengthWatcher(10, editText));  
  17.   
  18.     }  
  19. }  
限制输入字符数为10个

main.xml 文件

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent">  
  5.     <TextView  
  6.         android:id="@+id/label"  
  7.         android:layout_width="fill_parent"  
  8.         android:layout_height="wrap_content"  
  9.         android:text="Type here:"/>  
  10.     <EditText  
  11.         android:id="@+id/entry"  
  12.         android:singleLine="true"  
  13.         android:layout_width="fill_parent"  
  14.         android:layout_height="wrap_content"  
  15.         android:background="@android:drawable/editbox_background"  
  16.         android:layout_below="@id/label"/>  
  17.     <Button  
  18.         android:id="@+id/ok"  
  19.         android:layout_width="wrap_content"  
  20.         android:layout_height="wrap_content"  
  21.         android:layout_below="@id/entry"  
  22.         android:layout_alignParentRight="true"  
  23.         android:layout_marginLeft="10dip"  
  24.         android:text="OK" />  
  25.     <Button  
  26.         android:layout_width="wrap_content"  
  27.         android:layout_height="wrap_content"  
  28.         android:layout_toLeftOf="@id/ok"  
  29.         android:layout_alignTop="@id/ok"  
  30.         android:text="Cancel" />  
  31. </RelativeLayout>  

效果为输入了10个字符后,光标停在末尾

EditText限制最大字符数(中文,字母,数字)

限定EditText输入个数的解决方案很多,但是一般主要考虑两点,也就是处理两件事: (1)不同语言字符(英文、中文等)处理方式 (2)输入字符达到数目后,是否仍然允许用户输入 第一点,...
  • Dev_Hanyu
  • Dev_Hanyu
  • 2016年11月07日 15:26
  • 1607

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

​       最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下: 1、第一种方式是通过EditText的inputType来实现,可以通过xml或者java文...
  • goodlixueyong
  • goodlixueyong
  • 2014年10月31日 15:22
  • 49581

EditText输入限制:整数,小数,最大值,最大字符长度,手机号

Android EditText输入限制:整数,小数,最大值,最大字符长度,手机号
  • wen_wu_shuang_quan
  • wen_wu_shuang_quan
  • 2017年04月28日 15:22
  • 878

Android EditText输入最大长度限制如何给用户以友好的提示

参考: http://www.codes51.com/article/detail_156877.html 我们知道EditText有个属性android:maxLength=...
  • f24762
  • f24762
  • 2016年03月24日 11:56
  • 3023

EditText输入最大字数控制

android EditText输入框如何实现文字的输入长度控制呢,达到这种需求的有很多种方法; 第一种:那就是直接在XML布局代码里面设置: ...
  • u010020280
  • u010020280
  • 2016年09月21日 15:54
  • 2079

editText限制输入的4种方法

方式1:xml中配置inputType。 常用于限制为 Date,time,number,Email,phone等常用的格式 方式2:xml中配置digits。可以自定义限制的区间。 方式3:java...
  • zml_2015
  • zml_2015
  • 2016年04月06日 15:46
  • 23222

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

最近项目要求限制密码输入的字符类型, 例如不能输入中文。   现在总结一下EditText的各种实现方式,  以比较各种方法的优劣。  第一种方式:  设置EditText的inputType属性...
  • brycegao321
  • brycegao321
  • 2016年08月22日 16:44
  • 10161

关于android 中EditText 特殊字符过滤和字符长度限制的最优方法

在android开发中,经常会碰到edittext中特殊字符过滤和字符长度限制同时要求的问题,由于android不同版本之间的兼容问题,以及各种手机支持情况不同,因此,经常会出现一些设备上面不兼容问题...
  • scyatcs
  • scyatcs
  • 2013年04月14日 02:23
  • 6456

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

android 中如何限制 EditText 最大输入字符数 1、在 xml 文件中设置文本编辑框属性作字符数限制 如:android:maxLength="10" 即限制最大输入字符个数为1...
  • zzf112
  • zzf112
  • 2016年05月18日 16:18
  • 339

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

方法一: 在 xml 文件中设置文本编辑框属性作字符数限制 如:android:maxLength="10" 即限制最大输入字符个数为10 方法二: 在代码中使用I...
  • fengkuanghun
  • fengkuanghun
  • 2014年03月11日 15:48
  • 1105
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android 中如何限制 EditText 最大输入字符数
举报原因:
原因补充:

(最多只允许输入30个字)