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

时间:2014-07-15 04:24:53

标签: android

我正在使用这样的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的最大长度

任何人都有这个好主意吗?

谢谢

10 个答案:

答案 0 :(得分:51)

public void setEditTextMaxLength(int length) {
    InputFilter[] filterArray = new InputFilter[1];
    filterArray[0] = new InputFilter.LengthFilter(length);
    edt_text.setFilters(filterArray);
}

答案 1 :(得分:39)

简单的One-Liner将是:

myEditText.setFilters(new InputFilter[] { new InputFilter.LengthFilter(10) });

//replace 10 with required length.

答案 2 :(得分:31)

试试这种方式

<强>输入过滤

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)});


    }

答案 3 :(得分:11)

对于Kotlin

myEditText.filters = arrayOf(InputFilter.LengthFilter(maxLength))

答案 4 :(得分:6)

如果我们想限制 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);

答案 5 :(得分:2)

在@ Deepak的基础上,我使用了以下内容:

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

答案 6 :(得分:1)

在科特林

textInputEditText.filters = arrayOf(InputFilter.LengthFilter(10))

答案 7 :(得分:0)

您可以非常轻松地使用此功能:

 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);

答案 8 :(得分:0)

使用此方法:

private void setEditTextMaxLength(EditText et, int maxLength) {
    et.setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)});
}

答案 9 :(得分:0)

et.filters = arrayOf<InputFilter>(InputFilter.LengthFilter(20))

在科特林