我使用这样的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 的最大长度
有人对此有好主意吗?
感谢
一个简单的单行线是:
Java:
myEditText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(10) });
Kotlin:
myEditText.filters = arrayOf(InputFilter.LengthFilter(10))
public void setEditTextMaxLength(int length) {
InputFilter[] filterArray = new InputFilter[1];
filterArray[0] = new InputFilter.LengthFilter(length);
edt_text.setFilters(filterArray);
}
对于Kotlin
myEditText.filters = arrayOf(InputFilter.LengthFilter(maxLength))
试试这种方法
输入过滤器
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)});
}
如果我们想限制EditText中的字符输入,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);
在@Deepak的基础上,我使用了以下内容:
public void setEditTextMaxLength(final EditText editText, int length) {
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(length);
editText.setFilters(FilterArray);
}
et.filters = arrayOf<InputFilter>(InputFilter.LengthFilter(20))
在kotlin 中
kotlin 中的textInputEditText.filters = arrayOf(InputFilter.LengthFilter(10))
您可以非常非常容易地使用此函数:
public static void setEditTextMaxLength(EditText editText, int length) {
InputFilter[] FilterArray = new InputFilter[1];
FilterArray[0] = new InputFilter.LengthFilter(length);
editText.setFilters(FilterArray);
}
并将其用于您的活动:
setEditTextMaxLength(edt_passcode, 5);
使用此方法:
private void setEditTextMaxLength(EditText et, int maxLength) {
et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
}