Android ::用其他InputFilter以编程方式设置EditText的最大长度

我这样使用InputFilter只允许alpha和数字

private InputFilter[] inputFilters = new InputFilter[] { new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { for (int i = start; i < end; ++i) { if (!Pattern.compile("[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890]*").matcher(String.valueOf(source.charAt(i))).matches()) { return ""; } } return null; } } }; 

但问题是xml文件中的“android:maxLength”值不能与此InputFilter一起使用

我想我需要在InputFilter中设置EditText的最大长度

任何人都有这个好主意?

谢谢

Solutions Collecting From Web of "Android ::用其他InputFilter以编程方式设置EditText的最大长度"

试试这个方法

inputfilter

 InputFilter filter = new InputFilter() { @Override public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) { for (int i = start; i < end; ++i) { if (!Pattern.compile("[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890]*").matcher(String.valueOf(source.charAt(i))).matches()) { return ""; } } return null; } }; 

如何申请

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EditText edt =(EditText)findViewById(R.id.edt) ; edt.setFilters(new InputFilter[]{filter,new InputFilter.LengthFilter(10)}); } 
 public void setEditTextMaxLength(int length) { InputFilter[] filterArray = new InputFilter[1]; filterArray[0] = new InputFilter.LengthFilter(length); edt_text.setFilters(filterArray); } 

如果我们想限制EditText中的字符input,那么在XML布局中的EditText会给我们android:maxLength来做到这一点。 但是在java代码中,你可能会想知道为什么没有setMaxLength(int length)函数 。 这背后的原因是,当你想限制EditText接受一定的值,你必须过滤它们,这将由setFilters调用。 为了使我们的EditText具有固定的大小,我们可以使用下面的代码。

 EditText et = new EditText(this); int maxLength = 3; InputFilter[] FilterArray = new InputFilter[1]; FilterArray[0] = new InputFilter.LengthFilter(maxLength); et.setFilters(FilterArray); 

一个简单的One-Liner将是:

 MyditText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(10) }); //replace 10 with req length 

build立在@ Deepak的我使用了以下内容:

 public void setEditTextMaxLength(final EditText editText, int length) { InputFilter[] FilterArray = new InputFilter[1]; FilterArray[0] = new InputFilter.LengthFilter(length); editText.setFilters(FilterArray); }